Невже в Linux немає способу отримати час для створення файлів на файлах cifs / smb?


6

Мені бентежить далеко в сценарії резервного копіювання, і я пропустив щось головне. Я знаю, що файлові системи ext3 не відстежують дату створення, але копіювання файлів у ext3 оновлює змінений час, як це бачиться через stat (який би працював). Однак, коли файли копіюються з одного сервера Windows на інший (кріплення у мене через smb / cifs), мій тестування змінений час не оновлюється. Я використовую функцію пошуку, щоб зробити пошук на акціях cifs. Чи справді немає способу визначити, коли новий новий файл створюється над часткою CIF в Linux, використовуючи "знайти"?

Крім того, я дуже добре знайомий з rsync, і в цій ситуації обмеження rsync виключають його як варіант. Я думав, що можу використати rsync для пошуку та спробувати підключити результати до дії (gzip), але я думаю, що підрозділи були б смішними. Можливо, неправильно, звичайно. Будь-які пропозиції були б вдячні. Можна надати більш детальну інформацію, але я не думаю, що це можливо.


Що дає stat (1) (частина GNU coreutils, найімовірніше, встановлений у пакетних coreutils для будь-якого розповсюдження, який ви використовуєте) дає вам доступ / зміну / зміну часу для файлу, що знаходиться у відповідній файловій системі? Це може дати вам хоча б деякі підказки.
Самі Лайн

Statзабезпечує час доступу, змінювати час та змінювати час. Копіювання файлу протягом оновлень ext3 змінить час. Windows (NT) створила, звичайно, час, який оновлюється, коли файл створюється за допомогою копії. Однак з відповіді JdeBP, наведеної нижче, основні програми GNU, такі як stat, lsта find, не мають можливості виявити або відобразити новостворені файли на машинах Windows через загальну частку CIF. Дякуємо за ваш коментар
kiwisan

Відповіді:


16

У ядрі Linux вже xstat(2)декілька років працює системний виклик. Девід Хоуеллс з RedHat зробив велику частину роботи. xstat(2)дозволяє отримати час створення (іноді перезаписуючи "час народження" або "час народження" у світі Linux та BSD без поважних причин) файлів з декількох файлових систем, які підтримують його, включаючи EXT4 (який має часову позначку створення на диску) та CIFS (який завдяки своїй спадщині DOS / OS / 2 / Windows підтримує створення часової позначки як громадянина першого класу протягом десятиліть). М. Хоуеллс працював над патчами CIFS, які йдуть разом із системним викликом.

У OpenSolaris та BSD фактично є st_birthtimдата в їх stat(2)системному виклику, і ця функція доступна для сценаристів сценаріїв за допомогою прикладних програм, таких як findта ls. На OpenSolaris lsлюдини сторінці ви знайдете crtimeпоруч atime, mtimeі ctimeв декількох місцях. Крім того , FreeBSD findкоманда має -Bmin, -Bnewerі -Btimeпраймеріз. І у Mac OS lsє -Uможливість.

Якщо ви писали свій сценарій для OpenSolaris, BSD або Mac OS 10, ви можете просто вступити в дію з часом створення. Дійсно, якби ви писали для Windows, ви могли б зробити те саме. Cygwin підтримує st_birthtim з 2007 року , зробивши CreationTimeчасові позначки Win32 , які були з першої версії Windows NT і які Windows NT підтримує як в NTFS, так і в FAT-томах, доступними для інструментів Cygwin.

Однак це не так у світі GNU Linux. Час створення часу ще не повинен зробити це GNU coreutils "ls або GNU findutils"find . Дійсно, це ще не є частиною основного ядра Linux. Частина проблеми полягає в тому, що xstat(2)системний виклик завалився в диверсії, де люди хотіли зберегти три часові позначки, а не чотири, як в API ядра Windows NT, і скинути його ctimeна заміщення crtime.

Відповідь Лінуса Торвальдса в 2010 році полягала в тому, що "все абсолютно марно і люди навіть не можуть погодитися на ім'я" та "Давайте почекаємо п'ять років".

Насправді, як я підозрюю, що більшість людей, які читають це, будуть знати, світ широко погоджується з назвою "час створення" з 1980-х років, і ми чекали принаймні 25 років. Це ім'я, яке використовується в OS / 2 1.0; це ім'я, яке використовується у VMS ODS-1; це ім'я, яке використовується в Windows NT 3.5; це ім'я, яке використовується в SMB; і це ім'я, яке використовується у питанні. ☺

Подальше читання


Дякую, що знайшли час, щоб відповісти так грунтовно, та за подальше читання. Одне запитання: я думав, що rsync покладається на statдзвінки. Як rsync здійснює це інакше, ніж findабо ls?
kiwisan

statxдодано в 4.11. Файлова система cifs також виставляє час створення як псевдо-xattr, user.cifs.creationtimeзначенням якого є FILETIME Win32 (64 біта, що зберігає кількість інтервалів 100 наносекунд з 1 січня 1601 UTC), хоча його можна читати, а не встановлювати.
Джефрі Босбум

1

Я не можу відповісти на це запитання, але, принаймні, можу дати вам підказку: у книзі « Впровадження CIFS: загальна Інтернет-файлова система » Крістофера Р. Гертеля є дві дуже цікаві сторінки:

сторінка 1 та сторінка 2

Вони ніби вказують на те, що можна отримати інформацію, яку ви шукаєте.

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