Add support for btrfs subvolumes for user homes

new switch added to useradd command, --btrfs-subvolume-home. When
specified *and* the filesystem is detected as btrfs, it will create a
subvolume for user's home instead of a plain directory. This is done via
`btrfs subvolume` command.  Specifying the new switch while trying to
create home on non-btrfs will result in an error.

userdel -r will handle and remove this subvolume transparently via
`btrfs subvolume` command. Previosuly this failed as you can't rmdir a
subvolume.

usermod, when moving user's home across devices, will detect if the home
is a subvolume and issue an error messages instead of copying it. Moving
user's home (as subvolume) on same btrfs works transparently.
This commit is contained in:
Adam Majer
2019-01-21 09:32:36 +01:00
committed by Serge Hallyn
parent caefe9e8de
commit c1d36a8acb
6 changed files with 158 additions and 2 deletions

View File

@ -1819,6 +1819,13 @@ static void move_home (void)
return;
} else {
if (EXDEV == errno) {
if (btrfs_is_subvolume (prefix_user_home) > 0) {
fprintf (stderr,
_("%s: error: cannot move subvolume from %s to %s - different device\n"),
Prog, prefix_user_home, prefix_user_newhome);
fail_exit (E_HOMEDIR);
}
if (copy_tree (prefix_user_home, prefix_user_newhome, true,
true,
user_id,