我正在尝试研究 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
MS-DOS 文件系统变体不支持文件权限或所有者(存储在磁盘上)。因此,内核将它们默认为挂载用户——在本例中为 root。
您可以通过传递
uid=
andgid=
选项来覆盖它。例如,sudo mount -o loop,uid=1000,gid=1000 -t msdos "$DISK" "$MOUNTPOINT"
。(我在那里添加了引用,这是一个很好的习惯)。您可以检查您的 uid/gid 是什么id
;它很可能不是 1000,或者执行以下操作:这些选项
man 8 mount
至少记录在 中。PS:该问题中提到了几种不带 sudo 的挂载选项;例如,udisk。