як сказати 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

EDIT - покращити цю відповідь, оскільки не відразу зрозуміло, чому це не допомогло ОП:

OP копіює файли з однієї файлової системи в іншу і хоче зберегти c-time. Більшість людей розуміють, c-timeщо означає "створити час", що невірно в більшості систем UNIX / Linux (файлові системи Windows відстежують "створення" або "народження").

Здебільшого, в UNIX та Linux c-time- це часова марка, яка використовується для запису останнього відрізка " C " inode . Вклад змінюється, якщо будь-який з його атрибутів оновлюється:

OP не може зберегти c-timeфайли своїх файлів, коли вони перенесені на нову файлову систему. Створення цих файлів у нових файлових системах є однією з перелічених вище умов (створення inode / file).

/ РЕД


9
Дякую. Я знаю це. Але прочитайте запитання ще раз уважно. Я використав, -aщо говорить: для archive mode; equals -rlptgoD цього -tвже включено.
Насер

1
ви намагаєтесь зберегти час зміни? ctime НЕ для "створеного" його для (статусу) зміни
h3rrmiller

1
Я хочу, щоб він працював так, як це робиться для файлів, які не є на встановленому диску. тобто зберігайте ту саму печатку часу, яку ви бачите під час роботи ls -lз файлом. Це працює для файлів, які не знаходяться у точці монтажу. Але всі файли, які знаходяться всередині точки монтажу, мають на них часову позначку, що вказує на те, що вони були створені. Як би ви цього разу не називали. Я просто хотів, щоб вона використовувала ту саму печатку часу на файлах у джерелі. Тепер це не так. Я хочу, щоб усі аспекти часу були скопійовані. тобто робиться клон файлу. час створення, зміна часу тощо ...
Nasser

4
час зміни (ctime) оновлюється при зміні inode (тобто створення / дозвіл, зміна / переміщення / тощо). тому що ви створюєте новий inode (оскільки ви копіюєте файл через файлову систему (окремі таблиці inode) ctime оновлюється. Навколо цього немає способу, тому що це зміна inode, а не файл. Погляньте на en.wikipedia.org/wiki/Stat_(system_call)#ctime
h3rrmiller

3
ls -lпоказує mtime (модифікувати) not ctime
h3rrmiller

6

як вже було сказано hr3miller, -a (або --архіва) дорівнює -rlptgoD і вже включає час синхронізації.

Однак коли rsync копіює дані, наприклад, кріплення NFS / FAT32 / NTFS, коли збереження користувача та власника не вдається, rsync не намагатиметься встановити час. Rsync попередить щось подібне

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

Тому уникайте збереження користувача та групи за допомогою використання

-rlptD

замість

-rlptgoD

Використовуйте це лише тоді, коли не збереження власника та групи - це варіант для вас. Зауважте, що збереження символьних посилань та інших особливостей також може викликати таку поведінку. Вам потрібно буде пройти сторінку man для кожної функції rsync (-r -l -p -t -g -o -D), яку ви хочете створити для резервного копіювання.


-2

Я використовую rsync -azі впевнений, що це зберігає мені час модифікації. Я ще раз перевірив це.


2
Це тому, що -a( --archive) включає -t.
heemayl

Однак ні, ctime не можна довільно скинути. (Я спочатку неправильно зрозумів питання, вибачте.)
Мік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.