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

ソースツリーにマウントポイントがあるときにファイルのタイムスタンプを保存するように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

答え1

からman rsync

   -t, --times                 preserve modification times

あるファイルシステムから別のファイルシステムにファイルをコピーして保存しようとしているため、ほとんどc-timeの人はc-time「生成時間」を理解していますが、ほとんどのUNIX / Linuxシステムでは正しくありません(Windowsファイルシステムは「生成」または「生成」時間です。を追跡します)。

ほとんどの場合、UNIXとLinuxではc-timeタイムスタンプを使用して最後のinodeを記録します。'歩く。 inodeの属性のいずれかが更新されると、inodeも変更されます。

c-timeOP は、ファイルを新しいファイルシステムにインポートするとファイルをアーカイブできません。新しいファイルシステムでこれらのファイルを生成することは、上記の条件の1つです(inode /ファイルの生成)。

答え2

hr3millerがすでに述べたように、-a(または--archive)は-rlptgoDと同じで、すでに同期時間を含みます。

ただし、rsyncがデータをコピーする場合、rsyncはNFS / FAT32 / NTFSマウントがユーザーと所有者を保持できない時間を設定しようとしません。 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)のマニュアルページを注意深く読んでください。

答え3

このtouchツールを使用してこれを達成できます。この-rパラメータは、あるファイル/フォルダから別のファイル/フォルダにタイムスタンプをコピーします。

cd srcParentDir
find srcDir -exec touch -r {} /target/dir/{} \;

または例えば:

cd /home/me
find . -exec touch -r {} /home/BACKUP/{} \;

次の文を実行します。

touch -r ./data/a.txt /home/BACKUP/./data/a.txt
touch -r ./foo.txt /home/BACKUP/./foo.txt
touch -r ./boo.txt /home/BACKUP/./boo.txt

したがって、デフォルトでは古いタイムスタンプが新しいファイルシステムにコピーされます。

ターゲットパスにスペースがある場合はエスケープする必要があります/home/my\ spaced\ path/{}100%確信はありませんが、それがあなたに役立つと思います。

答え4

私はそれを使用し、rsync -azそれが私の修正時間を保存すると確信しています。今また確認してみました。

関連情報