我编写了一个 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 守护程序来安装udisksctl
或udisks
安装,这就是您的图形桌面界面正在执行的操作。[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 mount
和man fstab
了解这些选项之间的区别等)。
[1] 原生 Linux 文件系统(如 ext4)与 FAT 不同;文件系统记录哪个用户 ID 拥有每个文件,因此谁挂载 FS 并不重要。 Windows NTFS 也支持用户 ID,但不要问我在 Linux 上安装它时它的行为如何。
[2] 这可能会有一些额外的策略限制 (polkit):默认情况下,当您使用 SSH 远程登录到该计算机时,您将无法使用 udisk。