我正在尝试研究 FAT32 的内部结构,为此我正在尝试创建 FAT32 映像,安装它并在命令行上执行一些文件操作。根据问题这里,我知道没有办法使用 sudo 来挂载图像。我仍然想知道为什么我最终需要 sudo 才能在安装点内执行文件操作。接下来是一个小的 bash 脚本,它演示了哪些有效,哪些无效。有人可以告诉我如何在没有 root 的情况下执行此操作吗?
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 即可安装的选项;例如,U盘。