Add SATA storage in UmbrelOs

Hi guys, I need a help with my UmbrelOs.

Recently, I added two 1 TB SATA hard drives to my computer running UmbrelOS.I was able to detect the drives and mount them manually, but they do not appear in the Files app. I also tried to configure them to mount automatically by editing the /etc/fstab file. However, every time I reboot the system, the file is restored to its default configuration, and all of my changes are lost.

I would like to know:

  • How can I make the hard drives appear in the Files app?

  • How can I configure them to mount automatically on every boot, even after restarting UmbrelOS?

Below are the commands I used, along with a screenshot to help illustrate the issue.

umbrel@umbrel:~/umbrel/home$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 111.8G 0 disk
├─sda1 8:1 0 200M 0 part /run/rugix/mounts/config
├─sda2 8:2 0 9.6G 0 part /run/rugix/mounts/system
├─sda3 8:3 0 9.6G 0 part
└─sda4 8:4 0 92.3G 0 part /mnt/root/var/lib/systemd/timesync
/var/lib/systemd/timesync
/mnt/root/var/log
/var/log
/mnt/root/var/lib/docker
/var/lib/docker
/kopia
/home
/data
/run/rugix/state
/run/rugix/mounts/data
sdb 8:16 0 931.5G 0 disk
└─sdb1 8:17 0 931.5G 0 part /data/umbrel-os/home

/home
sdc 8:32 0 931.5G 0 disk
├─sdc1 8:33 0 931G 0 part
└─sdc2 8:34 0 519M 0 part

umbrel@umbrel:~$ /mnt/“Disco 1 - Backup”
-bash: /mnt/Disco 1 - Backup: Is a directory

umbrel@umbrel:~$ cd “/mnt/Disco 1 - Backup”
umbrel@umbrel:/mnt/Disco 1 - Backup$ ls
‘$RECYCLE.BIN’ ‘Arquivos Antigos’ Backup Softwares Trabalho
Administrativo ‘BACKUP HD RECUPERADO’ Estudos ‘System Volume Information’ media

umbrel@umbrel:/mnt$ ls /mnt
‘Disco 1 - Backup’ HD02 HD_02 root

umbrel@umbrel:/mnt$ ls -la /mnt
total 24
drwxr-xr-x 1 root root 4096 Jul 23 22:19 .
drwxr-xr-x 1 root root 4096 Jul 23 19:57 ..
drwxrwxrwx 1 root root 4096 May 22 09:47 ‘Disco 1 - Backup’
drwxr-xr-x 4 root root 4096 Jul 23 19:53 HD02
drwxr-xr-x 2 root root 4096 Jul 23 21:48 HD_02
drwxr-xr-x 1 root root 4096 Jul 23 19:57 root

umbrel@umbrel:~$ lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda
└─sda1 ext4 1.0 HD02 c0ad99d1-340e-4d00-b989-d92335df7383 869.2G 0% /mnt/root/mnt/HD02
/mnt/HD02

sdc
├─sdc1 ntfs Disco 1 - Backup 02CA0359CA0347FD 720.8G 23% /mnt/root/mnt/Disco 1 - Backup
│ /mnt/Disco 1 - Backup
└─sdc2 ntfs EEC8B8A8C8B87087
zram0 swap 1 zram0 643eabe8-b0fa-4d0a-8547-ec64981597c3 [SWAP]

/etc/fstabを編集してもマシン再起動すると元に戻ります。
custom-hooksを使いましょう。

/home/umbrel/umbrel/custom-hooks/pre-start

SAMPLE SCRIPT

#!/bin/bash
set -e

DISK=“/dev/disk/by-uuid/<DEVICE UUID>”
DISK_MOUNT=“<YOUR MOUNT POINT>”

mkdir -p “$DISK_MOUNT”

if ! mountpoint -q “$DISK_MOUNT”; then
mount “$DISK” “$DISK_MOUNT”
fi

I think there are two separate things happening here. umbrelOS currently only auto-detects USB drives as external storage, so an internally connected SATA drive won’t automatically appear in Files. Also, mounting it under /mnt won’t expose it there. The mount point needs to be somewhere under /home/umbrel/umbrel/external/.

The /etc/fstab reset is expected on recent umbrelOS versions because the base system is restored on each boot. The custom pre-start hook mentioned above is the right workaround.

For the NTFS partition shown in your output, create or edit the hook:

sudo install -d -m 755 /home/umbrel/umbrel/custom-hooks
sudo nano /home/umbrel/umbrel/custom-hooks/pre-start

Put this in the file:

#!/bin/bash
set -u

TARGET="/home/umbrel/umbrel/external/Disco-1-Backup"
DEVICE="/dev/disk/by-uuid/02CA0359CA0347FD"

mkdir -p "$TARGET"
if ! mountpoint -q "$TARGET"; then
    mount "$DEVICE" "$TARGET"
fi

Then make it executable and reboot:

sudo chmod +x /home/umbrel/umbrel/custom-hooks/pre-start
sudo reboot

It should then appear under External in the Files app. If you already have a pre-start hook, add the mount block to the existing file rather than replacing it.

Also, don’t try to remount the 1 TB disk that is already mounted at /data/umbrel-os/home and /home. That is currently being used as Umbrel’s main data drive. The UUID in the example above is only for the separate NTFS backup partition. This is still a self-maintained workaround; connecting the extra drive through a USB-to-SATA adapter is the path umbrelOS can detect and mount automatically.

I go test your option and return with the answer. I used the USB adapter, but I think its no secure for maintance and my adapter after a time its desconnects. I dont no why. But, thanks for help

Thanks man. I go test your solution and read the case in github. Very thanks

hey, sorry for the delay.

I was not successfull with my disk. I tried to do what he told me, but nothing happened.

I was not successfull with my disk. I tried to do what he told me, but nothing happened.

hey, I checked the current public umbrelOS source and the mount path from my last reply is still correct. The likely problem is that the hook either didn’t run or the NTFS mount failed. Umbrel continues booting when a pre-start hook fails, so Files can just look unchanged.

The pre-start hook was added in umbrelOS 1.7.2. Can you confirm your exact umbrelOS version, then run this after a reboot and paste the full output?

HOOK="/home/umbrel/umbrel/custom-hooks/pre-start"
TARGET="/home/umbrel/umbrel/external/Disco-1-Backup"
DEVICE="/dev/disk/by-uuid/02CA0359CA0347FD"

sudo systemctl status umbrel-custom-pre-start.service --no-pager
sudo journalctl -u umbrel-custom-pre-start.service -b --no-pager
sudo ls -l "$HOOK" "$DEVICE"
sudo cat "$HOOK"
sudo bash -n "$HOOK" && echo "hook syntax: OK"
sudo "$HOOK"
sudo mountpoint "$TARGET"
sudo findmnt --mountpoint "$TARGET"
sudo lsblk -f

Don’t format or change anything on the disk yet. This should show whether the hook was skipped, the UUID is no longer present, or NTFS refused the mount. If the hook contains any unrelated passwords, redact those before posting it.

My version of UmbrelOS is 1.7.4. Below is the answer for you. It is sorted according to the code.

umbrel@umbrel:~$ sudo systemctl status umbrel-custom-pre-start.service --no-pager
[sudo] password for umbrel:
○ umbrel-custom-pre-start.service - Run Umbrel custom pre-start hook
Loaded: loaded (/etc/systemd/system/umbrel-custom-pre-start.service; static)
Active: inactive (dead) since Fri 2026-08-07 14:21:42 UTC; 24h ago
Invocation: 34f2fe9779ec4314b1007625dc34c70c
Process: 789 ExecStart=/opt/umbrel-custom-hooks/run-pre-start (code=exited, status=0/SUCCESS)
Main PID: 789 (code=exited, status=0/SUCCESS)
Mem peak: 32.5M
CPU: 69ms

Aug 07 14:21:41 umbrel run-pre-start[789]: umbrel custom pre-start hook: running '/home/umbrel/umbrel/custom-ho…e-start’Aug 07 14:21:42 umbrel ntfs-3g[828]: Version 2022.10.3 integrated FUSE 28
Aug 07 14:21:42 umbrel ntfs-3g[828]: Mounted /dev/sda1 (Read-Write, label “Disco 1 - Backup”, NTFS 3.1)
Aug 07 14:21:42 umbrel ntfs-3g[828]: Cmdline options: rw
Aug 07 14:21:42 umbrel ntfs-3g[828]: Mount options: allow_other,nonempty,relatime,rw,fsname=/dev/sda1,blkdev,bl…ize=4096Aug 07 14:21:42 umbrel ntfs-3g[828]: Ownership and permissions disabled, configuration type 7
Aug 07 14:21:42 umbrel run-pre-start[789]: umbrel custom pre-start hook: completed successfully
Aug 07 14:21:42 umbrel ntfs-3g[828]: Unmounting /dev/sda1 (Disco 1 - Backup)
Aug 07 14:21:42 umbrel systemd[1]: umbrel-custom-pre-start.service: Deactivated successfully.
Aug 07 14:21:42 umbrel systemd[1]: Finished umbrel-custom-pre-start.service - Run Umbrel custom pre-start hook.
Hint: Some lines were ellipsized, use -l to show in full.

umbrel@umbrel:~$ sudo journalctl -u umbrel-custom-pre-start.service -b --no-pager
Aug 07 14:21:41 umbrel systemd[1]: Starting umbrel-custom-pre-start.service - Run Umbrel custom pre-start hook…
Aug 07 14:21:41 umbrel run-pre-start[789]: umbrel custom pre-start hook: running ‘/home/umbrel/umbrel/custom-hooks/pre-start’
Aug 07 14:21:42 umbrel ntfs-3g[828]: Version 2022.10.3 integrated FUSE 28
Aug 07 14:21:42 umbrel ntfs-3g[828]: Mounted /dev/sda1 (Read-Write, label “Disco 1 - Backup”, NTFS 3.1)
Aug 07 14:21:42 umbrel ntfs-3g[828]: Cmdline options: rw
Aug 07 14:21:42 umbrel ntfs-3g[828]: Mount options: allow_other,nonempty,relatime,rw,fsname=/dev/sda1,blkdev,blksize=4096
Aug 07 14:21:42 umbrel ntfs-3g[828]: Ownership and permissions disabled, configuration type 7
Aug 07 14:21:42 umbrel run-pre-start[789]: umbrel custom pre-start hook: completed successfully
Aug 07 14:21:42 umbrel ntfs-3g[828]: Unmounting /dev/sda1 (Disco 1 - Backup)
Aug 07 14:21:42 umbrel systemd[1]: umbrel-custom-pre-start.service: Deactivated successfully.
Aug 07 14:21:42 umbrel systemd[1]: Finished umbrel-custom-pre-start.service - Run Umbrel custom pre-start hook.

umbrel@umbrel:~$ sudo ls -l “$HOOK” “$DEVICE”
lrwxrwxrwx 1 root root 10 Aug 7 14:21 /dev/disk/by-uuid/02CA0359CA0347FD → ../../sda1
-rwx–x–x 1 root root 214 Aug 4 17:24 /home/umbrel/umbrel/custom-hooks/pre-start

umbrel@umbrel:~$ sudo cat “$HOOK”
#!/bin/bash
set -u

#DISCO 1
TARGET=“/home/umbrel/umbrel/external/Disco-1-Backup”
DEVICE=“/dev/disk/by-uuid/02CA0359CA0347FD”

mkdir -p “$TARGET”
if ! mountpoint -q “$TARGET”; then
mount “$DEVICE” “$TARGET”
fi

umbrel@umbrel:~$ sudo bash -n “$HOOK” && echo “hook syntax: OK”
hook syntax: OK

umbrel@umbrel:~$ sudo mountpoint “$TARGET”
/home/umbrel/umbrel/external/Disco-1-Backup is a mountpoint

umbrel@umbrel:~$ sudo findmnt --mountpoint “$TARGET”
TARGET SOURCE FSTYPE OPTIONS
/home/umbrel/umbrel/external/Disco-1-Backup /dev/sda1 fuseblk rw,relatime,user_id=0,group_id=0,allow_other,blksize=4096

hey, the logs show what’s happening. The hook runs and mounts the disk successfully, but ntfs-3g immediately unmounts it when the pre-start service finishes. The later mountpoint check passes because running the hook manually mounted it again. The inactive (dead) service status is normal for this type of startup hook.

I reproduced the same behavior with the public 1.7.4 image. Since umbrelOS 1.7.4 includes the kernel NTFS3 driver, open the hook again:

sudo nano /home/umbrel/umbrel/custom-hooks/pre-start

Change this line:

mount "$DEVICE" "$TARGET"

to:

mount -t ntfs3 "$DEVICE" "$TARGET"

Save it and reboot. After the reboot, run:

sudo findmnt --mountpoint /home/umbrel/umbrel/external/Disco-1-Backup

It should now show ntfs3 under FSTYPE and remain mounted in Files. If it gives an error instead, post the new pre-start journal output before changing anything else on the disk.

I wanna kiss you man hahah. It’s working, but I did a little change. In the line
TARGET="/home/umbrel/umbrel/external/Disco-1-Backup"

I change to:
TARGET="/home/umbrel/umbrel/home/Disco-1-Backup"

and bellow is the result:

Green: My Disk.

The change it’s because the disk not appeared in External. I dont know why. If you wanna share with appeared in yout test,I appreciate it.

The code completed:

#!/bin/bash
set -u

#DISCO 1
TARGET="/home/umbrel/umbrel/home/Disco-1-Backup"
DEVICE="/dev/disk/by-uuid/02CA0359CA0347FD"

mkdir -p "$TARGET"
if ! mountpoint -q "$TARGET"; then
mount -t ntfs3 "$DEVICE" "$TARGET"
fi

HD02

TARGET="/home/umbrel/umbrel/home/HD02"
DEVICE="/dev/disk/by-uuid/c0ad99d1-340e-4d00-b989-d92335df7383"

mkdir -p "$TARGET"

if ! mountpoint -q "$TARGET"; then
mount "$DEVICE" "$TARGET"
fi

hahaha, glad we got it working man!

And yep, your change makes sense. The External section only lists drives that Umbrel detects as USB storage. Since yours are connected through SATA, mounting them inside the Home folder is the easiest way to make them show up in Files.

Just one small fix: change this line:

HD02

to:

# HD02

Without the #, the script will try to run HD02 as a command on every boot.

Other than that, your setup looks good. Just make sure both drives are mounted after a reboot before copying anything to those folders. If a mount ever fails, the folder will still be there, but files copied into it would go to Umbrel’s main drive instead. You can check both with:

sudo findmnt --mountpoint /home/umbrel/umbrel/home/Disco-1-Backup
sudo findmnt --mountpoint /home/umbrel/umbrel/home/HD02