Partitioning /home for desktop workstation (HDD+SSD)

Solution 1:

The following steps describe how to mount the partition on your HDD below /mnt/archive and then add bind mounts to the home directories of two users, alice and bob. The home directories themselves are still on another partition.

All commands must be issued as user root.

  1. Determine UUID of archive partition:

    lsblk -fs
    NAME      FSTYPE      LABEL       UUID                                 MOUNTPOINT
    sda5      ext4        slash       467ddc36-vvvv-xxxx-yyyy-zzzzzzzzzzzz /
    └─sda                                                                  
    sda6      ext4        home        a87c2c2d-vvvv-xxxx-yyyy-zzzzzzzzzzzz /home
    └─sda                                                                  
    sdb8      ext4        archive     291bd44c-vvvv-xxxx-yyyy-zzzzzzzzzzzz 
    └─sdb                                                                  
    ...
    

    In my case, I have / and /home on sda and an unmounted partition labelled archive on sdb8. For the purpose of this post we assume sda is an SSD and sdb is an HDD.

  2. Mount the archive partition into an empty directory, say /mnt/archive:

    mkdir /mnt/archive
    mount UUID=291bd44c-vvvv-xxxx-yyyy-zzzzzzzzzzzz /mnt/archive
    chown root:root /mnt/archive
    chmod 750 /mnt/archive
    
  3. Create user specific folders below /mnt/archive (i.e. on the HDD) for users alice and bob and adjust the permissions so that only they can access these directories. Note that the directories are now on the partition archive on the HDD:

    mkdir /mnt/archive/alice
    chown alice:alice /mnt/archive/alice
    chmod 750 /mnt/archive/alice
    
    mkdir /mnt/archive/bob
    chown bob:bob /mnt/archive/bob
    chmod 750 /mnt/archive/bob
    
  4. Create archive folders in their home directories. Don't worry because the directories are owned by root. This does not hurt because alice isnt't supposed to put anything in that directory. The directory /home/alice/archive only serves as a location where to bind-mount the actual /mnt/archive/alice to and when it is mounted, the permissions and ownership of /mnt/archive/alice apply.

    mkdir /home/alice/archive
    mkdir /home/bob/archive
    
  5. bind mount /mnt/archive/alice to /home/alice/archive:

    mount -o bind /mnt/archive/alice /home/alice/archive
    mount -o bind /mnt/archive/bob /home/bob/archive
    
  6. When satified, add the following lines to /etc/fstab to mount the partition automatically upon boot:

    # The /archive partition
    UUID=291bd44c-vvvv-xxxx-yyyy-zzzzzzzzzzzz /mnt/archive  ext4 defaults  0  2
    
    # bind mounts for alice and bob:
    /mnt/archive/alice /home/alice/archive  none  bind  0  0
    /mnt/archive/bob   /home/bob/archive    none  bind  0  0
    

Before the bind mount is done, alice will just see a directory owned by root in her home directory. The directory is empty and she cannot (and should not) put files in there:

alice@ubuntu:~$ ll
total 16
drwxr-xr-x 2 root  root  4096 Jan 25 12:51 archive
-rw-r--r-- 1 alice alice 8980 Jan 25 12:43 examples.desktop

After the bind mount is done (mount -o bind /mnt/archive/alice /home/alice/archive), alice will see the directory /mnt/archive/alice in her home directory instead, including the permissions of /mnt/archive/alice:

alice@ubuntu:~$ ll
total 16
drwxr-x--- 2 alice alice 4096 Jan 25 13:06 archive
-rw-r--r-- 1 alice alice 8980 Jan 25 12:43 examples.desktop

She can do whatever she likes in and with that archive directory and everything will happen on the partition on the HDD.


To undo the above steps, use the following commands:

# undo bind-mounts:
umount /home/alice/archive
umount /home/bob/archive

# unmount actual partition:
umount /mnt/archive