Programmatically create a btrfs file system whose root directory has a specific owner

291 views Asked by At

Background

I have a test script that creates and destroys file systems on the fly, used in a suite of performance tests.

To avoid running the script as root, I have a disk device /dev/testdisk that is owned by a specific user testuser, along with a suitable entry in /etc/fstab:

$ ls -l /dev/testdisk
crw-rw---- 1 testuser testuser 21, 1 Jun 25 12:34 /dev/testdisk
$ grep testdisk /etc/fstab
/dev/testdisk /mnt/testdisk auto noauto,user,rw 0 0

This allows the disk to be mounted and unmounted by a normal user.

Question

I'd like my script (which runs as testuser) to programmatically create a btrfs file system on /dev/testdisk such that the root directory is owned by testuser:

$ mount /dev/testdisk /mnt/testdisk
$ ls -la /mnt/testdisk
total 24
drwxr-xr-x 3 testuser  testuser   4096 Jun 25 15:15 .
drwxr-xr-x 3 root      root       4096 Jun 23 17:41 ..
drwx------ 2 root      root      16384 Jun 25 15:15 lost+found

Can this be done without running the script as root, and without resorting to privilege escalation (use of sudo) within the script?

Comparison to other file systems

With ext{2,3,4} it's possible to create a filesystem whose root directory is owned by the current user, with the following command:

mkfs.ext{2,3,4} -F -E root_owner /dev/testdisk

Workarounds I'd like to avoid (if possible)

I'm aware that I can use the btrfs-convert tool to convert an existing (possibly empty) ext{2,3,4} file system to btrfs format. I could use this workaround in my script (by first creating an ext4 filesystem and then immediately converting it to brtfs) but I'd rather avoid it if there's a way to create the btrfs file system directly.

0

There are 0 answers