web-dev-qa-db-ja.com

ソースツリーにマウントポイントがあるときにファイルのタイムスタンプを保持するようにrsyncに指示する方法

これに関連して 質問

問題の短い説明:

ソースツリー内にマウントポイントがある場合、ターゲットツリーにコピーしたときのそのマウントポイント内のファイルのタイムスタンプは、-aオプションを使用しても保持されません。

詳細な説明:

これがソースツリーであると想定します。

                       /home/                           /home/
                         |                                |
                        me/                             BACKUP/
                         |                                |
                    +----+----------+                +----+-------+
                    |    |          |                |    |       |
                 data/  foo.txt    boo.txt         data/ foo.txt boo.txt
                    |                                |
                   a.txt                           a.txt

上記のdata/は、外部USBディスクにマウントされています。すべてがext4ファイルシステムです。ソース内のすべてのものは私のmeが所有しています。

BACKUPも、たまたまマウントポイントであるバックアップUSBディスクです。

このコマンドrsync -av --delete /home/me/ /home/BACKUP/を発行した後、/home/BACKUP/data/およびその下にあるすべてに、これらのファイルが/home/me/data/内のファイルのタイムスタンプではなく、現在作成されているかのように現在のタイムスタンプがあることがわかりました。 data外の他のファイルとフォルダーは、タイムスタンプが正しく保持されました。

質問です:上記の設定でrsyncを使用して、マウントされたポイントのファイルとフォルダーでもすべてのファイルとフォルダーのタイムスタンプを保持するように指示するにはどうすればよいですか?

使っています:

>uname -a
Linux 3.5.0-17-generic #28-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux

>rsync -v
rsync  version 3.0.9  protocol version 30
42
Nasser

man rsyncから:

   -t, --times                 preserve modification times

編集-なぜこれがOPを助けなかったのかすぐに明らかではないので、この答えを改善するために:

OPはファイルシステム間でファイルをコピーしており、c-timeを保持したいと考えています。ほとんどの人はc-timeが「作成時間」を意味することを理解していますが、これはほとんどのUNIX/Linuxシステムでは正しくありません(Windowsファイルシステムは「作成」または「誕生」時間を追跡します)。

ほとんどの場合、UNIXおよびLinuxでは、c-timeは、最後のiノードを記録するために使用されるタイムスタンプです '[〜#〜] c [〜#〜] 'hange。属性が更新されると、iノードが変更されます。

OPは、新しいファイルシステムに移動したときに、ファイルのc-timeを保持できません。新しいファイルシステムでのこれらのファイルの作成は、上記の条件の1つです(inode /ファイルの作成)。

/編集

48
h3rrmiller

hr3millerがすでに言ったように、-a(または--archive)は-rlptgoDと等しく、同期時間をすでに含んでいます。

ただし、rsyncがデータをコピーする場合など。ユーザーと所有者の保持に失敗したNFS/FAT32/NTFSマウントでは、rsyncは時刻を設定しようとしません。 Rsyncは次のような警告を出します

rsync: chown "/mnt/backup/postgres/hourly.0/primary/var" failed: Operation not permitted (1)

したがって、次を使用してユーザーとグループを保持しないでください。

-rlptD

の代わりに

-rlptgoD

所有者とグループを保持しない場合にのみこれを使用してください。シンボリックリンクやその他の機能を保持すると、その動作もトリガーされることに注意してください。バックアップするすべてのrsync機能(-r -l -p -t -g -o -D)のマニュアルページを参照する必要があります。

8
user1283043