kjo*_*kjo 5 permissions rsync symlink
注意:这是一个由两部分组成的问题:为什么会发生错误,以及如何解决错误。(这两部分是相关的,因为“为什么”问题的答案可能会阐明“如何”问题。)
rsync -avuz /some/source/directory .
我正在尝试的命令给出了表单的几个错误(大致)
rsync: symlink "/target/directory/foo/bar/baz" -> "../../bar/baz" failed: Read only file system (30)
Run Code Online (Sandbox Code Playgroud)
.../target/directory
当前目录在哪里。
我对这个错误感到困惑。该rsync
进程确实没有写入权限../..
,但我不明白为什么它首先需要:它肯定有写入权限/target/directory/foo/bar/baz
。
尽管如此,在手头的情况下,有这个问题的文件数量只占被复制文件总数的很小一部分,因此如果这些有问题的符号链接被“复制到”常规文件就好了其名称已以某种方式更改以表明其特殊性质,并且其内容仅由原始符号链接的目标组成。例如,符号链接
/some/source/directory/foo/bar/baz -> ../../bar/baz
Run Code Online (Sandbox Code Playgroud)
之前显示的将“复制到”常规文件
/target/directory/foo/bar/baz-PSEUDOSYMLINK
Run Code Online (Sandbox Code Playgroud)
...完全由下面显示的一行组成
../../bar/baz
Run Code Online (Sandbox Code Playgroud)
在将 Unix 目录树复制到 Windows 系统时,我看到过类似的操作。
有没有一种简单的方法可以做到这一点?
问题
\n我用来通过rsync
备份我的音乐收藏 ( /mnt/Music/
)crontab
到较旧的(因此有时容易出错)硬盘 ( /mnt/Music_Backups
)。
在手动检查该备份分区后,我注意到这些备份有时(如果通过运行则静默crontab
)失败,手动备份尝试也是如此:
sudo rsync -aq --delete /mnt/Music/ /mnt/Music_Backups\n\n rsync: [generator] failed to set times on \\\n "/mnt/Music_Backups/ROCK & POP": Read-only file system (30)\n
Run Code Online (Sandbox Code Playgroud)\n评估
\n这是我的系统详细信息。
\nrsync
版本v3.2.3/etc/crontab
入口:# /etc/crontab entry\n0 5 * * * root nice -n 19 rsync -aq --delete /mnt/Music/ /mnt/Music_Backups\n
Run Code Online (Sandbox Code Playgroud)\n验证设备、分区、挂载点:
\nlsblk | grep -B1 -i music_back\n\n sdd 8:48 1 1.8T 0 disk \n \xe2\x94\x94\xe2\x94\x80sdd1 8:49 1 1.8T 0 part /mnt/Music_Backups\n\nblkid | grep sdd1\n\n /dev/sdd1: LABEL="Music_Backups" \\\n UUID="b90047d3-147c-491c-a17d-17763f79a12a" \\\n BLOCK_SIZE="4096" TYPE="ext4" \\\n PARTLABEL="Music_Backups" \\\n PARTUUID="98425256-c626-41f1-a85e-6f5feaf412d6"\n
Run Code Online (Sandbox Code Playgroud)\n原因
\n虽然目标驱动器权限正常:rsync
执行以下操作后我遇到了相同的错误:
sudo chown -R root:victoria /mnt/Music_Backups/\n
Run Code Online (Sandbox Code Playgroud)\n...并且分区在磁盘分区实用程序 ( Gparted
) 中看起来很好,命令行实用fsck
程序表明实际上存在错误:
sudo umount /mnt/Music_Backups/\n\n## Note: if any programs, e.g. a file manager, are using / viewing\n## that partition you won\'t be able to `umount` it until you navigate\n## away from anything accessing `/mnt/Music_Backups/`\n\n## Update/CAUTION: do not run fsck on a Network Attached Storage (NAS) \n## hard drive (commonly sold on AMZN ...); these require special \n## software; fsck will kill your HDD.\n\nsudo fsck /dev/sdd1\n\n fsck from util-linux 2.36\n e2fsck 1.45.6 (20-Mar-2020)\n Music_Backups: recovering journal\n Music_Backups contains a file system with errors, check forced.\n Pass 1: Checking inodes, blocks, and sizes\n Inode 85460709 extent tree (at level 1) could be shorter. Optimize<y>? yes\n Pass 1E: Optimizing extent trees\n Pass 2: Checking directory structure\n Pass 3: Checking directory connectivity\n Pass 4: Checking reference counts\n Pass 5: Checking group summary information\n\n Music_Backups: ***** FILE SYSTEM WAS MODIFIED *****\n Music_Backups: 164762/122101760 files (19.8% non-contiguous), 423271337/488378368 blocks\n\n## Recheck:\n\nsudo fsck /dev/sdd1\n\n fsck from util-linux 2.36\n e2fsck 1.45.6 (20-Mar-2020)\n Music_Backups: clean, 164762/122101760 files, 423271337/488378368 blocks\n\nsudo mount /dev/sdd1 /mnt/Music_Backups/\n\nsudo rsync -aq --delete /mnt/Music/ /mnt/Music_Backups\n\n$ ## completed normally\n
Run Code Online (Sandbox Code Playgroud)\n结论
\n基于此,我相信当我的操作系统检测到分区上的错误时,它会阻止该分区上的读写,直到这些错误得到解决,从而阻止rsync
完成其任务。
笔记
\nrsync
:
-a
[存档] :相当于-rlptgoD
. 这是表达您想要递归并想要保留几乎所有内容的快捷方式... [请参阅 https://linux.die.net/man/1/rsync]
-q
[quiet] :抑制非错误消息
附录 1:失败通知
\n如前所述,etc/crontab
计划的备份默默地 失败了。这是该问题的解决方案(添加到/etc/crontab
)。
DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"\n\n# add this as one line (broken here, for readability;\n# substitute your user name for "victoria"):\n\n0 5 * * * victoria nice -n 19\n rsync -aq --delete /mnt/Music/ /mnt/Music_Backups ; EXIT_STATUS=$?;\n if [ $EXIT_STATUS -ne 0 ]; then\n notify-send -i warning -t 0 "/etc/crontab for rsync\'d Music Backups failed"\n --icon=dialog-information ;\n mutt -s "/etc/crontab for rsync\'d Music Backups failed" <your_email_address>; fi\n
Run Code Online (Sandbox Code Playgroud)\n这样,如果备份失败,我将来应该通过屏幕通知和电子邮件收到通知。
\n\nnotify-send
请注意,使用andmutt
时存在一些问题/etc/crontab
:
当以普通用户身份运行时root
(例如我:“victoria”),您将看不到通知;并且,您需要mutt
为root
(用户)配置电子邮件帐户。
crontab
因此,作为普通用户运行该条目要容易得多。我递归地chown
将我的备份位置设置为root:victoria
,因此将该crontab
条目运行为“victoria”不是问题。
如上所述,执行notify-send
via/etc/crontab
需要靠近 顶部的这一行/etc/crontab
:
DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"\n
Run Code Online (Sandbox Code Playgroud)\necho $UID
在终端中以普通用户 [例如“victora”(我)] 的身份执行以获得该数字(“1000”,上面)。
详细信息请参见:
\n有了这一切,我的crontab
条目(上面)每天早上 5 点运行,如果备份因任何原因失败,它会(在屏幕上;电子邮件)通知我。
您可以使用此条目测试这些命令crontab
(每分钟运行一次;“apples”不是程序,因此肯定会失败):
* * * * * <your_user_name> nice -n 19\n apples -aq --delete /mnt/Music/ /mnt/Music_Backups ; EXIT_STATUS=$?;\n if [ $EXIT_STATUS -ne 0 ]; then\n notify-send -i warning -t 0 "/etc/crontab for rsync\'d Music Backups failed"\n --icon=dialog-information ;\n mutt -s "/etc/crontab for rsync\'d Music Backups failed" <your_email_address>; fi\n
Run Code Online (Sandbox Code Playgroud)\n附录 2:失败通知
\n\n[victoria@victoria ~]$ date\n Wed Jan 6 08:48:38 AM PST 2021\n\n[victoria@victoria ~]$ lsblk\n\n NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\n ...\n sdd 8:48 1 1.8T 0 disk \n \xe2\x94\x94\xe2\x94\x80sdd1 8:49 1 1.8T 0 part /mnt/Music_Backups\n ...\n\n[victoria@victoria ~]$ sudo umount /mnt/Music_Backups/\n\n## Update/CAUTION: do not run fsck on a Network Attached Storage (NAS) \n## hard drive (commonly sold on AMZN ...); these require special \n## software; fsck will kill your HDD.\n\n## Repair disk partition [accept default Y/n suggestions, if present]:\n\n[victoria@victoria ~]$ sudo fsck /dev/sdd1\n fsck from util-linux 2.36.1\n e2fsck 1.45.6 (20-Mar-2020)\n Music_Backups: recovering journal\n Music_Backups contains a file system with errors, check forced.\n Pass 1: Checking inodes, blocks, and sizes\n Pass 2: Checking directory structure\n Pass 3: Checking directory connectivity\n Pass 4: Checking reference counts\n Pass 5: Checking group summary information\n Music_Backups: 165909/122101760 files (20.0% non-contiguous), 425759721/488378368 blocks\n\n## Repeat until no errors:\n\n[victoria@victoria ~]$ sudo fsck /dev/sdd1\n fsck from util-linux 2.36.1\n e2fsck 1.45.6 (20-Mar-2020)\n Music_Backups: clean, 165909/122101760 files, 425759721/488378368 blocks\n\n[victoria@victoria ~]$ sudo mount /dev/sdd1 /mnt/Music_Backups/\n\n## /etc/crontab entry (broken over lines here for readability):\n\n 0 5 * * * victoria nice -n 19\n rsync -aq --delete /mnt/Music/ /mnt/Music_Backups ; STATUS=$? ;\n if [ $STATUS -ne 0 ]; then notify-send -i warning -t 0 "/etc/crontab\n for rsync\'d Music Backups failed" --icon=dialog-information ;\n mutt -s "/etc/crontab for rsync\'d Music Backups failed" mail@VictoriasJourney.com ;\n fi\n\n## Check: manually run Music_Backup command\n\n[victoria@victoria ~]$ time rsync -aq --delete /mnt/Music/ /mnt/Music_Backups\n 0:39.91\n\n[victoria@victoria ~]$ \n
Run Code Online (Sandbox Code Playgroud)\n