
注:これは、エラーが発生する理由と回避策の2つの部分で構成される質問です。 (「なぜ」質問への答えが「どのように」質問を明らかにすることができるので、2つの部分は互いに関連しています。)
私が試しているコマンドは、rsync -avuz /some/source/directory .
(おおよそ)形式のいくつかのエラーを提供します
rsync: symlink "/target/directory/foo/bar/baz" -> "../../bar/baz" failed: Read only file system (30)
.../target/directory
現在ディレクトリがある場所です。
このエラーのために混乱しています。rsync
プロセスに書き込み権限がないというのは事実ですが、../..
そもそもなぜそうするのか理解できません。確かに書き込み権限があります/target/directory/foo/bar/baz
。
ただし、現時点では、この問題のあるファイルの数はコピーされるファイル全体のほんの一部にすぎないため、これらの問題のあるシンボリックリンクを通常のファイルに「コピー」してもかまいません。名前その特別な性格を示すために何らかの形で変更され、コンテンツ元のシンボリックリンクの宛先のみが含まれます。たとえば、シンボリックリンク
/some/source/directory/foo/bar/baz -> ../../bar/baz
以前に表示されたコンテンツは「コピー」されます。一般ファイル
/target/directory/foo/bar/baz-PSEUDOSYMLINK
...次のような行で構成されています。
../../bar/baz
UnixディレクトリツリーをWindowsシステムにコピーするときに同様のことが発生したことを見たことがあります。
これを行う簡単な方法はありますか?
答え1
質問
私は私の音楽コレクション()を古い(したがってエラーが発生しやすい)ハードドライブ()にrsync
バックアップしてそれを使います。/mnt/Music/
crontab
/mnt/Music_Backups
crontab
このバックアップパーティションを手動で確認した後、手動バックアップの試みと同様に、これらのバックアップが時々(実行されている場合は自動的に)失敗することがわかりました。
sudo rsync -aq --delete /mnt/Music/ /mnt/Music_Backups
rsync: [generator] failed to set times on \
"/mnt/Music_Backups/ROCK & POP": Read-only file system (30)
評価する
私のシステムの詳細は次のとおりです。
- オペレーティングシステム:アーチLinux x_86。
rsync
バージョン v3.2.3/etc/crontab
入り口:
# /etc/crontab entry
0 5 * * * root nice -n 19 rsync -aq --delete /mnt/Music/ /mnt/Music_Backups
デバイス、パーティション、マウントポイントを確認してください。
lsblk | grep -B1 -i music_back
sdd 8:48 1 1.8T 0 disk
└─sdd1 8:49 1 1.8T 0 part /mnt/Music_Backups
blkid | grep sdd1
/dev/sdd1: LABEL="Music_Backups" \
UUID="b90047d3-147c-491c-a17d-17763f79a12a" \
BLOCK_SIZE="4096" TYPE="ext4" \
PARTLABEL="Music_Backups" \
PARTUUID="98425256-c626-41f1-a85e-6f5feaf412d6"
理由
ターゲットドライブの権限は良好ですが、rsync
次の操作後も同じエラーが発生しました。
sudo chown -R root:victoria /mnt/Music_Backups/
...ディスクパーティションユーティリティ()Gparted
はパーティションは問題ないようですが、コマンドラインユーティリティはfsck
実際にエラーがあることを示しています。
sudo umount /mnt/Music_Backups/
## Note: if any programs, e.g. a file manager, are using / viewing
## that partition you won't be able to `umount` it until you navigate
## away from anything accessing `/mnt/Music_Backups/`
## Update/CAUTION: do not run fsck on a Network Attached Storage (NAS)
## hard drive (commonly sold on AMZN ...); these require special
## software; fsck will kill your HDD.
sudo fsck /dev/sdd1
fsck from util-linux 2.36
e2fsck 1.45.6 (20-Mar-2020)
Music_Backups: recovering journal
Music_Backups contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Inode 85460709 extent tree (at level 1) could be shorter. Optimize<y>? yes
Pass 1E: Optimizing extent trees
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Music_Backups: ***** FILE SYSTEM WAS MODIFIED *****
Music_Backups: 164762/122101760 files (19.8% non-contiguous), 423271337/488378368 blocks
## Recheck:
sudo fsck /dev/sdd1
fsck from util-linux 2.36
e2fsck 1.45.6 (20-Mar-2020)
Music_Backups: clean, 164762/122101760 files, 423271337/488378368 blocks
sudo mount /dev/sdd1 /mnt/Music_Backups/
sudo rsync -aq --delete /mnt/Music/ /mnt/Music_Backups
$ ## completed normally
結論として
これに基づいて、私のOSがパーティション上のエラーを検出した場合、そのエラーが解決されるまでそのパーティションへの読み取りと書き込みをブロックしてrsync
操作を完了できないと思います。
ノート
rsync
:
-a
[archive]: と同じです-rlptgoD
。再帰的でほぼすべてを維持したいことを表すショートカットです... [https://linux.die.net/man/1/rsync参照]-q
[quiet]:エラーではなくメッセージを抑制します。
付録1:失敗通知
前述したように、etc/crontab
バックアップ予約何も言わずに 失敗。この問題の解決策は次のとおりです(に追加されました/etc/crontab
)。
DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
# add this as one line (broken here, for readability;
# substitute your user name for "victoria"):
0 5 * * * victoria nice -n 19
rsync -aq --delete /mnt/Music/ /mnt/Music_Backups ; EXIT_STATUS=$?;
if [ $EXIT_STATUS -ne 0 ]; then
notify-send -i warning -t 0 "/etc/crontab for rsync'd Music Backups failed"
--icon=dialog-information ;
mutt -s "/etc/crontab for rsync'd Music Backups failed" <your_email_address>; fi
これにより、後でバックアップが失敗した場合に画面通知と電子メールで通知が届きます。
https://bash.cyberciti.biz/guide/The_exit_status_of_a_command
https://stackoverflow.com/questions/20449543/shell-equality-operators-eq
notify-send
mutt
そして使用にはいくつかの問題があることに注意してください/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"
echo $UID
通常のユーザー(「victora」(me)など)を端末で実行して、数値(上記の「1000」)を取得します。
詳細については、次を参照してください。
- https://bbs.archlinux.org/viewtopic.php?id=216912
- https://wiki.archlinux.org/index.php/Desktop_notifications#Usage_in_programming
それにもかかわらず、私のcrontab
エントリ(上記)は毎朝午前5時に実行され、何らかの理由でバックアップが失敗した場合は私に知らせます(画面、電子メール)。
このエントリを使用してこれらのコマンドをテストできますcrontab
(1分ごとに実行されます。「apples」はプログラムではないため、間違いなく失敗します)。
* * * * * <your_user_name> nice -n 19
apples -aq --delete /mnt/Music/ /mnt/Music_Backups ; EXIT_STATUS=$?;
if [ $EXIT_STATUS -ne 0 ]; then
notify-send -i warning -t 0 "/etc/crontab for rsync'd Music Backups failed"
--icon=dialog-information ;
mutt -s "/etc/crontab for rsync'd Music Backups failed" <your_email_address>; fi
付録2:失敗通知
[victoria@victoria ~]$ date
Wed Jan 6 08:48:38 AM PST 2021
[victoria@victoria ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...
sdd 8:48 1 1.8T 0 disk
└─sdd1 8:49 1 1.8T 0 part /mnt/Music_Backups
...
[victoria@victoria ~]$ sudo umount /mnt/Music_Backups/
## Update/CAUTION: do not run fsck on a Network Attached Storage (NAS)
## hard drive (commonly sold on AMZN ...); these require special
## software; fsck will kill your HDD.
## Repair disk partition [accept default Y/n suggestions, if present]:
[victoria@victoria ~]$ sudo fsck /dev/sdd1
fsck from util-linux 2.36.1
e2fsck 1.45.6 (20-Mar-2020)
Music_Backups: recovering journal
Music_Backups contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Music_Backups: 165909/122101760 files (20.0% non-contiguous), 425759721/488378368 blocks
## Repeat until no errors:
[victoria@victoria ~]$ sudo fsck /dev/sdd1
fsck from util-linux 2.36.1
e2fsck 1.45.6 (20-Mar-2020)
Music_Backups: clean, 165909/122101760 files, 425759721/488378368 blocks
[victoria@victoria ~]$ sudo mount /dev/sdd1 /mnt/Music_Backups/
## /etc/crontab entry (broken over lines here for readability):
0 5 * * * victoria nice -n 19
rsync -aq --delete /mnt/Music/ /mnt/Music_Backups ; STATUS=$? ;
if [ $STATUS -ne 0 ]; then notify-send -i warning -t 0 "/etc/crontab
for rsync'd Music Backups failed" --icon=dialog-information ;
mutt -s "/etc/crontab for rsync'd Music Backups failed" [email protected] ;
fi
## Check: manually run Music_Backup command
[victoria@victoria ~]$ time rsync -aq --delete /mnt/Music/ /mnt/Music_Backups
0:39.91
[victoria@victoria ~]$