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


42

この質問に関連

問題の簡単な説明:

ソースツリー内にマウントポイントがある場合、ターゲットツリーにコピーされたときのマウントポイント内のファイルのタイムスタンプは、-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

回答:


46

から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 /ファイルの作成)。

/編集


9
ありがとうございました。そんなこと知ってる。しかし、質問を注意深く読んでください。私が-a言う使用しました:archive mode; equals -rlptgoD そのため-t、すでに含まれています。
ナセル

1
変更時間を維持しようとしていますか?ctimeは「作成」されたものではなく、その(ステータス)変更のために
-h3rrmiller

1
マウントされたディスク上にないファイルと同じように動作させたい。つまりls -l、ファイルに対して実行するときに表示されるのと同じタイムスタンプを保持します。これは、マウントポイント内にないファイルで機能します。ただし、マウントポイント内にあるすべてのファイルには、作成されたことを示すタイムスタンプが付いています。今回は何を呼んでも。ソース内のファイルに同じタイムスタンプを使用したかっただけです。今ではありません。すべての時間の側面をコピーしてほしい。つまり、ファイルのクローンを作成します。作成時間、変更時間など
...-ナッセル

4
変更時刻(ctime)は、iノードへの変更(つまり、作成/許可の変更/移動/など)で更新されます。新しいiノードを作成しているため(ファイルシステム(個別のiノードテーブル)にファイルをコピーしているため)、ctimeが更新されます。それは、ファイルではなくiノードの変更であるため回避方法はありません。en.wikipedia.org/wiki/Stat_(system_call)#ctime
h3rrmiller

3
ls -lctimeではなくmtime(変更)を示しています
h3rrmiller

6

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)のマニュアルページを参照する必要があります。


-2

私はrsync -azそれを使用し、変更時間を保存することを確信しています。私は今それを再確認しました。


2
-a--archive)にが含まれて-tいるためです。
heemayl

ただし、ctimeは任意にリセットできません。(もともと質問を誤解してしまった、ごめんなさい。)
Mik
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.