我不明白为什么当我在 Ubuntu 12.04 中尝试插入外部 USB 驱动程序时,会看到下一条消息:
Error mounting: mount exited with exit code 1: helper failed with:
mount: only root can mount /dev/sdb1 on /media/sdb1
以下是内容/etc/fstab
:
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc nodev,noexec,nosuid 0 0
# / was on /dev/sda1 during installation
UUID=5f5d330f-d5f2-4157-9496-94f1dce2f181 / ext4 errors=remount-ro 0 1
# swap was on /dev/sda5 during installation
UUID=84747ef4-6f50-49bc-9df1-fcba364ba299 none swap sw 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
/dev/sdc1 /media/sdc1 vfat uid=1000,noauto 0 0
/dev/sdd1 /media/sdd1 vfat uid=1000,noauto 0 0
/dev/sdb1 /media/sdb1 vfat uid=1000,noauto 0 0
这是我的当前情况sudo fdisk -l
:
Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders, total 312581808 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e28b8
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 310484991 155241472 83 Linux
/dev/sda2 310487038 312580095 1046529 5 Extended
/dev/sda5 310487040 312580095 1046528 82 Linux swap / Solaris
Disk /dev/sdb: 993 MB, 993001472 bytes
2 heads, 1 sectors/track, 969728 cylinders, total 1939456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 133 1939455 969661+ 6 FAT16
Disk /dev/sdc: 4009 MB, 4009754624 bytes
16 heads, 32 sectors/track, 15296 cylinders, total 7831552 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd8e1f237
Device Boot Start End Blocks Id System
/dev/sdc1 * 32 7831551 3915760 b W95 FAT32
sdc
并且sdb
- 有外部 USB 驱动程序。
我可以解决这个问题并自动安装所有外部 USB 驱动器吗?
答案1
您需要将user
选项添加到您的fstab
/dev/sdc1 /media/sdc1 vfat uid=1000,noauto,user 0 0
/dev/sdd1 /media/sdd1 vfat uid=1000,noauto,user 0 0
/dev/sdb1 /media/sdb1 vfat uid=1000,noauto,user 0 0
该user
选项允许任何用户安装设备,如手册中所述:
通常,只有超级用户可以挂载文件系统。但是,当 fstab
user
中有一行包含该选项时,任何人都可以挂载相应的系统。
或者如果您希望任何用户安装/卸载驱动器,请使用users
:
/dev/sdc1 /media/sdc1 vfat uid=1000,noauto,users 0 0
/dev/sdd1 /media/sdd1 vfat uid=1000,noauto,users 0 0
/dev/sdb1 /media/sdb1 vfat uid=1000,noauto,users 0 0
手册页:
只有挂载文件系统的用户才能再次卸载它。如果任何用户都能够卸载,则在 fstab 行中使用 users 而不是 user。
笔记:选项user
还隐含了noexec
、nosuid
和nodev
,因此如果您需要这些选项,则需要添加它们的对应项。例如,如果您需要从驱动器执行二进制文件,则应添加选项exec
,因此您的选项将是uid=1000,noauto,user,exec
,其他两个选项也是如此。
进一步阅读:Fstab - Ubuntu 文档
答案2
如果 /etc/fstab 中有一个设备条目,它将阻止 Ubuntu 自动挂载程序在插入时挂载该设备。
我刚刚在我的系统上测试了这一点,该系统在插入时会自动安装我的拇指驱动器:
// insert thumb-drive
$ grep gvfsd /proc/mount
gvfsd-fuse on /run/user/msw/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,user=msw)
当我添加行时
/dev/sdb1 /mnt vfat noexec 0 0
到 /etc/fstab 并插入 U 盘,进程中出现了一系列活动gvfsd-udisks2-volume-monitor
,包括打开和读取 /etc/fstab(如图所示strace
)。U 盘未安装。
当我通过添加一个字符来注释掉该条目来更改 /etc/fstab 时:
#/dev/sdb1 /mnt vfat noexec 0 0
gvfsd-udisks2-volume-monitor 再次变得忙碌并挂载了拇指驱动器。我不必取出拇指驱动器并重新插入,也不必向 gvfsd 发送信号,因此自动挂载守护进程似乎正在监视 /etc/fstab 的更改。
我不知道它为什么会这样表现,但测试简单且可重复。