Fat32

無需 sudo 之後即可安裝

  • April 16, 2018

我正在嘗試研究 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,或者執行以下操作:

UID=`id -u`
GID=`id -g`
sudo mount -o loop,uid=$UID,gid=$GID -t msdos "$DISK" "$MOUNTPOINT"

這些選項man 8 mount至少記錄在 中。

PS:該問題中提到了幾種不帶 sudo 的掛載選項;例如,udisk。

引用自:https://unix.stackexchange.com/questions/438156