ファイルに仮想ドライブを設定しようとしています。これにより、ファイルがフラッシュデバイスに書き込まれます(関連なし)。仮想ドライブの作成と操作はスクリプト内で行われるため、rootではなくユーザースペースでこれを行う必要があります。このスクリプトは、フラッシュデバイスの構築とイメージングに使用されます。したがって、rootとして実行すると問題が発生します。
このファイルを仮想ドライブとしてマウントするために、/etc/fstabに次の行を追加しました。
/home/user/drive.img /home/user/mnt ext4 loop,rw,user,noauto,noexec 0 0
問題は、仮想ドライブをマウントするときにルートが〜/ mntの所有権を持っているため、通常のユーザーとしてマウントしようとする目的が失われることです。
他のファイルシステムでは、uid / gidを指定したときにマウントできることがわかりますが、既存のプロセスと互換性があるには仮想ドライブがext4である必要があります。 udisksctlを試しましたが、ループバックするにはルート認証が必要です。
マウントしてから所有権を変更しようとしますが(ルートとして)、マウント解除しません。 「同期」を実行してから、仮想ドライブのスナップショットを撮ります。綺麗ではなくて気に入らないけど今は大丈夫そうです。
答え1
記載されていない手順は、問題の原因であるext4ファイルシステムを作成する方法です。を使用すると、mkfs.ext4 /home/user/drive.img
ルートが所有するルートinodeが生成されるため、マウントしてもまだルートに属します。
解決策は、そのユーザーを実際のユーザーまたは一部の明示的な数値ユーザーとグループID-E root_owner
に属させるオプションを追加することです。 (もう一つの解決策は(Fedoraのパッケージ)を使ってinodeを編集することです。)この例は私にとって効果的でした。mkfs.ext4
-E root_owner=$uid:$gid
debugfs
e2fsprogs
uid=$(id -u)
gid=$(id -g)
rm -f /tmp/ext4fs
truncate -s 50M /tmp/ext4fs
if true
then mkfs.ext4 -E root_owner=$uid:$gid /tmp/ext4fs
else mkfs.ext4 /tmp/ext4fs
debugfs -w -R "set_inode_field . uid $uid" /tmp/ext4fs
debugfs -w -R "set_inode_field . gid $gid" /tmp/ext4fs
fi
# echo '/tmp/ext4fs /tmp/mymnt ext4 loop,rw,user,noauto,noexec' >>/etc/fstab
mkdir -p /tmp/mymnt
mount /tmp/ext4fs
ls -lRa /tmp/mymnt
touch /tmp/mymnt/afile
ls -l /tmp/mymnt
umount /tmp/ext4fs
インストール時にls
マウントポイントを次のように表示します。
drwxr-xr-x 3 meuh users 1024 May 15 21:04 .
そこにファイルを作成することができます。