如何在不使用 sudo 的情况下安装外部 SD 卡?

如何在不使用 sudo 的情况下安装外部 SD 卡?

我编写了一个 bash 脚本,旨在使用以下命令将特定的(truecrypt-)文件备份到 SD 卡(以及通过云共享的文件夹)上:同步命令。

问题是SD卡通常还没有安装,因此同步不起作用。所以我编写了一个脚本来安装卡、同步文件并再次卸载它。脚本:

#!/bin/bash

sudo mkdir /media/user_name/SDcard
sudo mount -t vfat LABEL="SDcard" /media/user_name/SDcard

rsync -avI /home/user_name/Dokumente/file_to_sync /media/user_name/SDcard
rsync -avI /home/user_name/Dokumente/file_to_sync /home/user_name/cloudbox

sudo umount /media/user_name/SDcard
sudo rmdir /media/user_name/SDcard 

虽然与 Cloudbox 的同步工作正常,但与 SD 卡的同步却无法正常工作。此外卸载目录两个命令均不执行。结果是,下次我使用该脚本时,出现错误,因为该目录已经存在。

当所有命令在终端中手动连续执行时,同步命令(与须藤) 到 SDcard 会给出错误消息:

user_name@host ~ $ sudo rsync -av ~/Dokumente/file_to_sync /media/user_name/SDcard/file_to_sync
sending incremental file list
file_to_sync
rsync: chown "/media/user_name/SDcard/.file_to_sync.tK2RnM" failed: Operation not permitted (1)

sent 524,416,101 bytes  received 127 bytes  61,696,026.82 bytes/sec
total size is 524,288,000  speedup is 1.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.0]

奇怪的是,如果我通过双击桌面图标而不是使用来安装SD卡须藤挂载...,我可以毫无问题地同步文件。

我的脚本有什么问题吗?我尝试了几次修改,但没有一个有效(更好)。

为什么双击安装和终端安装有区别,是什么?我如何在终端中“重现”“双击命令”?

我已经尝试让它工作很长一段时间了,论坛和教程等无法帮助我。所以我很感激任何人可以提供的任何一点点帮助......

谢谢

我的系统:Linux Mint 17(最初是 Cinnamon,但改为 XFCE),配备 CORE i7vPro、250 GB SSD、12 GB RAM(以及我遇到过的最糟糕的触摸板)的 Lenovo T440p

答案1

所以这是一个权限问题。普通用户无法访问root挂载的FAT文件系统。

这是因为 FAT 不包含所有权信息,因此所有文件都被视为由安装它的用户拥有。 [1]该chown错误消息是因为您尝试使用-a保留所有权信息的选项将您拥有的文件复制到 FAT 文件系统。但你不能在那里让文件归你的用户所有,它们必须归 root 所有。

你可以rsync也用 sudo运行(编辑:您还需要添加该--no-owner选项),或添加-ouid=$USER到安装命令中。

或者您可以使用udisk 守护程序来安装udisksctludisks安装,这就是您的图形桌面界面正在执行的操作。[2]

编辑:我忘了udisks看起来与 略有不同mount,抱歉。我使用udisksctl mount -b /dev/... 所以它显然不支持 LABEL= 语法。您可以使用 udev 创建的符号链接(类似快捷方式的文件)来代替。 udisksctl mount -b /dev/disk/by-label/SDcard

U盘会自行选择挂载点;路径将使用文件系统标识符(例如标签),因此只要这些标识符是唯一的,那么路径就会保持一致......这可能并不理想,呵呵。

我认为您可以udisks通过在/etc/fstab. GNOME Disks 有一个图形界面(选择磁盘,然后选择分区,单击下面的齿轮,编辑安装选项)。如果您想使用mount不带 的“旧”命令sudo,您甚至可以将“user”或“users”添加到安装选项列表中(请参阅man mountman fstab了解这些选项之间的区别等)。


[1] 原生 Linux 文件系统(如 ext4)与 FAT 不同;文件系统记录哪个用户 ID 拥有每个文件,因此谁挂载 FS 并不重要。 Windows NTFS 也支持用户 ID,但不要问我在 Linux 上安装它时它的行为如何。

[2] 这可能会有一些额外的策略限制 (polkit):默认情况下,当您使用 SSH 远程登录到该计算机时,您将无法使用 udisk。

相关内容