私はFAT32の内部を研究しようとしています。これを行うには、FAT32イメージを作成してマウントし、コマンドラインでいくつかのファイル操作を実行しようとします。質問によるとここ、sudoを使用して画像をマウントする方法を知っています。マウントポイント内でファイル操作を実行するためにsudoが必要な理由はまだ疑問に思っています。以下は、動作しているものと動作しないことを示す小さなbashスクリプトです。ルートなしでこれを行う方法を教えてくれる人はいますか?
DISK=/tmp/disk1.raw
MOUNTPOINT=/tmp/mount1
SIZE=512M
rm -f $DISK
rm -rf $MOUNTPOINT
# create disk image
qemu-img create -f raw $DISK $SIZE
# format disk image
mkfs.fat -v -F 32 $DISK
# make mountpoint
mkdir -p $MOUNTPOINT
# can't be helped
sudo mount -o loop -t msdos $DISK $MOUNTPOINT
# should work but doesn't
mkdir -p $MOUNTPOINT/tmp/
# actually works
sudo mkdir -p $MOUNTPOINT/tmp/
# should work but doesn't
dd of=$MOUNTPOINT/tmp/ticket2.txt if=/dev/zero bs=512 count=9
# actually works
sudo dd of=$MOUNTPOINT/tmp/ticket2.txt if=/dev/zero bs=512 count=9
ls -lR $MOUNTPOINT
sudo umount $MOUNTPOINT
答え1
MS-DOSファイルシステムのバリエーションは、ファイル権限または所有者(ディスクに保存されている)をサポートしません。したがって、カーネルはそれをインストールユーザー(この場合はroot)にデフォルト設定します。
uid=
そしてオプションを渡すことでそれを上書きできますgid=
。たとえば、sudo mount -o loop,uid=1000,gid=1000 -t msdos "$DISK" "$MOUNTPOINT"
。 (そこに引用符を追加しましたが、これは良い習慣です。)uid / gidが何であるかを確認するか、id
1000ではない可能性が高い、または次のことを実行できます。
UID=`id -u`
GID=`id -g`
sudo mount -o loop,uid=$UID,gid=$GID -t msdos "$DISK" "$MOUNTPOINT"
man 8 mount
これらのオプションは少なくとも文書化されています。
PS:質問にはsudoなしでインストールできるオプション(USBスティックなど)がいくつかあると言われています。