カテゴリー
rsyncコマンドで『some files/attrs were not transferred』でたまにファイルがコピーされないエラーに対処する
※ 当ページには【広告/PR】を含む場合があります。
2024/08/15
rsyncコマンドを使っていると、異なるユーザーで共有しているファイルやアクセス元のOSプラットフォームの違いにより、
ファイルが同期されなかった原因は時と場合により様々原因が考えられますが、これに対処するには、
rsyncのコマンドオプションを最適化する
以前の記事内容で、
そんなこんなでコマンドオプションを深く考えずに使っていると、ふとしたときに以下のようなエラーに遭遇するときがあります。
$ rsync -av --delete hoge/ ./
#ファイル書き込み時にエラー発生!
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.0]
...
この場合、rsyncコマンドでの書き込み先のフォルダへのファイル編集する権限が不足していたり、他のユーザーが対象のファイルを編集中でビジーであったりと、原因がいくつか考えられます。
これに対処するには、
基本的なrsyncのコマンドオプション
rsyncコマンドのオプションは結構な種類がありますが、基本的ないくつかを把握すれば全部を細かく覚える必要はないでしょう。
個人的に必要最低限覚えておくと良いと思しきオプションを以下にピックアップしておきます。
rsyncコマンドの書き込み特化版オプションの一例
さて本題ですが、rsyncでいうアーカイブモードとは
なので、ユーザーの書き込みをアーカイブモードからもっとゆるくしていけば、より"失敗しにくい"コピーになります。 (※逆に言うと、ファイルやフォルダの権限情報が変更されてしまうリスクとはトレードオフですので利用は良く考えましょう。)
-pオプション(パーミッション維持)を外す
-gオプション(グループ情報維持)を外す
-oオプション(オーナー情報維持)を外す
-Dオプション(デバイス再作成)を外す
-Oオプション(ディレクトリのタイムスタンプを保持しない)を付ける
ということで、ファイルやフォルダなどのパーミッション情報を極力無視して書き込みの成功率だけに重きを置いた場合のrsyncコマンドの使い方の一例が以下のようなものです。
#rsync -av --delete hoge/ ./ を以下のコマンドオプションに置き換え
$ rsync -rlOtv --delete hoge/ ./
まとめ
以上、rsyncコマンドを利用するときのちょっとした問題を取り上げてみました。
アーカイブモード(-aオプション)はファイルコピーのスタンダードな設定を寄せ集められているので、コマンドを使う側からすると便利な反面、一部のファイルへの操作がコケてしまう恐れもあります。
コピーが失敗してしまったら、現在のコマンドオプションをじっくり考えてみてください。
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー