Копирование файла, в который идёт запись - как?

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
kuksha
рядовой
Сообщения: 40
Зарегистрирован: 2008-11-01 16:46:03

Копирование файла, в который идёт запись - как?

Непрочитанное сообщение kuksha » 2014-12-02 11:46:03

Есть FreeBSD, допустим 10.1, хотя версия не важна.
Делается копирование файла, например бэкап.
Если в этот файл одновременно идёт запись, то делается копия той длины, которая была на момент запуска копирования.
То есть, получаем неполный файл... а запись продолжает идти своим чередом.
Для интереса попробовали в виндах - там такого делать не позволяют - стоит блокировка.

Собственно, вопрос: как с этим обходиться и как делать копирование в автомате.
Можно бы сделать свой скрипт копирования и запросить список открытых файлов, ставя занятый файл на паузу в отдельный поток, но как-то это криво...
Последний раз редактировалось f_andrey 2014-12-02 18:40:46, всего редактировалось 1 раз.
Причина: Автору. пожалуйста, выбирайте соответствующий раздел форума.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Neus
капитан
Сообщения: 1779
Зарегистрирован: 2008-09-08 21:59:56

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение Neus » 2014-12-02 13:34:29

а что в файлах?

kuksha
рядовой
Сообщения: 40
Зарегистрирован: 2008-11-01 16:46:03

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение kuksha » 2014-12-02 14:09:17

В данном случае неважно что в файлах.
Может и текст быть, то есть инфа в огрызке осмысленная, может и эксель и что угодно...

Аватара пользователя
Neus
капитан
Сообщения: 1779
Зарегистрирован: 2008-09-08 21:59:56

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение Neus » 2014-12-02 15:41:26

снэпшот делай и бэкапь
хотя все равно фигня будет

kuksha
рядовой
Сообщения: 40
Зарегистрирован: 2008-11-01 16:46:03

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение kuksha » 2014-12-02 16:44:44

снэпшот пробовали - получается та же фигня...
запускали в двух консолях:
в первой консоли запустили заливку файла через dd случайными числами
сразу во второй консоли сделали снэпшот этого файла
потом остановили заливку в первой консоли.
получили два файла разной длины - в снэпшоте и в исходном месте.

снэпшот от бэкапа в этом смысле не отличается ничем...

Аватара пользователя
Neus
капитан
Сообщения: 1779
Зарегистрирован: 2008-09-08 21:59:56

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение Neus » 2014-12-02 18:15:27

:D
А с чего они одинаковые будут?!
И какой смысл бэкапить файлы в которые идет запись?

kuksha
рядовой
Сообщения: 40
Зарегистрирован: 2008-11-01 16:46:03

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение kuksha » 2014-12-02 18:18:39

Блин, да никто одинаковости не ждёт...
Неприятность в том, что во время бэкапа я не всегда могу быть уверен, что в файлы не ведётся запись.
Теоретически у нас и ночью народ работает в конторе удалённо: ночной снапшот снял, а в нём какой-то файл кривым оказался...

guest
проходил мимо

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение guest » 2014-12-02 18:57:10

kuksha писал(а):Блин, да никто одинаковости не ждёт...
Неприятность в том, что во время бэкапа я не всегда могу быть уверен, что в файлы не ведётся запись.
Теоретически у нас и ночью народ работает в конторе удалённо: ночной снапшот снял, а в нём какой-то файл кривым оказался...
Вы странного хотите...
Запись не идет только в single-user mode
Full-backup (раз в неделю) + инкрементальный (каждый день)

Ну или ZFS

kuksha
рядовой
Сообщения: 40
Зарегистрирован: 2008-11-01 16:46:03

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение kuksha » 2014-12-02 19:49:28

guest, я такие советы сам могу давать...
Есть что по теме сказать?
ZFS осваивать только начали - в чём она может помочь пока не видим, если натолкнёте - только спасибо скажем :smile:

Аватара пользователя
Neus
капитан
Сообщения: 1779
Зарегистрирован: 2008-09-08 21:59:56

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение Neus » 2014-12-02 20:45:42

kuksha писал(а):Блин, да никто одинаковости не ждёт...
Неприятность в том, что во время бэкапа я не всегда могу быть уверен, что в файлы не ведётся запись.
Теоретически у нас и ночью народ работает в конторе удалённо: ночной снапшот снял, а в нём какой-то файл кривым оказался...
Это нужна объектная ФС.
Посылается месадж - объекты сами себя бэкапят

guest
проходил мимо

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение guest » 2014-12-02 22:05:10

kuksha писал(а):guest, я такие советы сам могу давать...
если можете, зачем ерунду пишите? (Без обид)

По теме, подумайте крепко как работает FS и что Вы хотите на live-FS, вопросы уйдут.
Про lsof - попробуйте и быстро убедитесь что подход нереальный, попробуйте изобрести новую FS со своим срезом (snapshot),
а-ля ZFS, хранение копий в самой FS и тд и тп.
Есть что по теме сказать?
ZFS осваивать только начали - в чём она может помочь пока не видим, если натолкнёте - только спасибо скажем :smile:
zfs snapshot

FiL
ст. лейтенант
Сообщения: 1368
Зарегистрирован: 2010-02-05 0:21:40

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение FiL » 2014-12-03 6:07:36

kuksha писал(а):Блин, да никто одинаковости не ждёт...
Неприятность в том, что во время бэкапа я не всегда могу быть уверен, что в файлы не ведётся запись.
Теоретически у нас и ночью народ работает в конторе удалённо: ночной снапшот снял, а в нём какой-то файл кривым оказался...
Вы-бы объяснили какого результата вы хотите добиться. Может тогда получите более внятный ответ. А то у вас на данный момент просто нытье по поводу того как оно есть, но нет толком поставленного вопроса на который можно было-бы ответить.

Аватара пользователя
Neus
капитан
Сообщения: 1779
Зарегистрирован: 2008-09-08 21:59:56

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение Neus » 2014-12-03 9:42:55

как раз понятно чего он хочет:
открытые на запись файлы должны бэкапиться после того как их закроют
этакий отложенный бэкап :)

kuksha
рядовой
Сообщения: 40
Зарегистрирован: 2008-11-01 16:46:03

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение kuksha » 2014-12-03 10:04:49

Ну да, Neus почти точно сформулировал - хочется отсутствия заведомо битых файлов, которые появляются таким способом.

Но, "отложенный бекап" - это просто первое, что мне в голову взбрело.
Интереснее было бы услышать, как народ вообще выходит из этой неприятности.
Ещё лучше - услышать что мы неправы и просто где-то что-то не докрутили в стандартных возможностях фрюхи...

Иначе получается, что временами в бэкапах файловых серверов появляются урезанные нерабочие файлы (почему не были корректно завершены все работы к моменту бэкапирования - отдельная песня...). Да, их можно поднять из других копий и скорее всего там они будут нормальные, но это тоже бабушка надвое сказала - файлы могут быть слишком часто используемыми...
С трудом верится, что только мы на это напоролись...
Поэтому я лишь описал что есть и не особо влезал в конкретные пути решения - упомянул только чтобы понятнее было что происходит.

Аватара пользователя
Neus
капитан
Сообщения: 1779
Зарегистрирован: 2008-09-08 21:59:56

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение Neus » 2014-12-03 12:24:52

почему почти? :)
вот смотри
-------------/------|------\----------->t
/\ это начало и конец записи, | это начало бэкапа
в UFS в бэкап не попадет изменение от | до \ , т.е. файл будет недоизмененный, это такая физика процесса, ничего не поделаешь :)
в случае с zfs, в бэкап не попадут изменения файла между /\

но тебя и zfs не устроит :)
тебе надо написать свой бэкапер работающий по такому алгоритму:
начинаем бэкап
если в процессе бэкапа натыкаемся на открытый файл - отращиваем тред ожидающий закрытие файла и бэкапящий его после закрытия
ждем завершения тредов и заканчиваем бэкап
вуаля!

С СУБД такое не прокатит. но их и не бэкапят средствами ФС

kuksha
рядовой
Сообщения: 40
Зарегистрирован: 2008-11-01 16:46:03

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение kuksha » 2014-12-03 12:57:41

Насчёт "почти" - Neus, да согласен.

Касаемо написания своего бэкапа и "отращивания треда" - ну да, в первом топике я по-моему то же самое писал...
Печально, что мы не ошиблись: штатные средства копирования во фрюхе (и снэпшоты в том числе) действительно несут вероятность появления таких вот "подарочков"...

Спасибо всем, кто помог разобраться! :smile:

Аватара пользователя
Neus
капитан
Сообщения: 1779
Зарегистрирован: 2008-09-08 21:59:56

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение Neus » 2014-12-03 14:18:00

kuksha писал(а): Печально, что мы не ошиблись: штатные средства копирования во фрюхе (и снэпшоты в том числе) действительно несут вероятность появления таких вот "подарочков"...
"это такая физика процесса, ничего не поделаешь" относится к любой обычной ФС на любой ОС
в ФС HAMMER можно мастер-слэйв репликацию соорудить штатными средствами - этаткий realtime backup получится :)

Гость
проходил мимо

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение Гость » 2014-12-04 8:28:05

Если не секрет, в какой системе штатные средства делают ту фигню какую вы хотите?

FiL
ст. лейтенант
Сообщения: 1368
Зарегистрирован: 2010-02-05 0:21:40

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение FiL » 2014-12-04 20:08:20

Ну, как-бы стандартное решение подобной задачи - это "закрываем все открытые файлы и только тогда начинаем бакап". И пусть весь мир подождет.

guest
проходил мимо

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение guest » 2014-12-04 22:26:38

FiL писал(а):Ну, как-бы стандартное решение подобной задачи - это "закрываем все открытые файлы и только тогда начинаем бакап". И пусть весь мир подождет.
Вы от вопроса не уходите, пример в студию где сие работает?
_КТО_ и _КАК_ будет лочить или _закрывать_ открытые файлы, что будет с демонами и сервисами
использующими эти файлы, как, например, закрыть логи и как будет работать ядро и система без логов?
:cz2:

FiL
ст. лейтенант
Сообщения: 1368
Зарегистрирован: 2010-02-05 0:21:40

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение FiL » 2014-12-05 0:44:49

Кто и как - ну, например, админ. Переведя систему в single user mode. А демоны и сервисы будут ждать пока бакап не закончится и системя не будет переведена в multiuser.

Аватара пользователя
Neus
капитан
Сообщения: 1779
Зарегистрирован: 2008-09-08 21:59:56

Re: Копирование файла, в который идёт запись - как?

Непрочитанное сообщение Neus » 2014-12-05 5:39:00

Фигню придумал