3

У меня есть каталог, содержащий много файлов журнала результатов (размер каталога ~ 4 ГБ), и набор запущенных процессов, которые продолжают записывать в эти файлы.

Чтобы позднее можно было правильно проанализировать результаты, я хочу скопировать весь каталог в место назначения архива и не могу остановить процессы.

Я хочу копию каталога, как это было в определенный момент времени. Так как размер каталога огромен (что означает, что копирование занимает около 40 секунд), а некоторые файлы записываются, обычный cp -r НЕ дает мне снимок в определенный момент времени, а скорее снимок файлов распространяться около 40 секунд. Это не достаточно хорошо.

Есть ли способ получить эксклюзивную блокировку каталога и всех его компонентов при копировании?

5 ответов5

2

LVM (менеджер логических томов) поддерживает снимки. Поскольку весь дистрибутив Linux имеет встроенный LVM, он является самым простым для вас. Единственным недостатком является необходимость воссоздать файловую систему.

Вот хороший учебник http://rhcelinuxguide.wordpress.com/2006/06/03/what-is-a-logical-volume-manager-lvm-snapshot-and-how-do-i-use-it/

1

Если cp занимает слишком много времени, чтобы предоставить нужные вам результаты, вы, скорее всего, не будете удовлетворены другими вариантами. Unix-копия примерно такая же базовая, как и для ввода-вывода.

Однако, если вы замедлили процессы ввода-вывода, используя другой процесс управления между диском и файлами при их изменении, накладные расходы могут не иметь значения. Я имею в виду, что вы можете запустить процесс на виртуальной машине (если это возможно), попробовать снимки с помощью rsync или даже subversion.

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

Например:

file.log -> /mnt/disk1/logarea/file.log

file.log -> /mnt/disk/logarea2/file.log

Так что вы можете мгновенно обновить символическую ссылку, а выходные каналы переместятся на новое место.

Возможно, вы даже сможете написать командный файл для обновления ссылки, сосчитать до 45 секунд, а затем переключить ее обратно - таким образом изолируя нужные данные.

Просто мысли, удачи.

0

Другой способ сделать это - использовать Logrotate для архивирования журналов каждую неделю / день / час, тогда у вас, по сути, будут снимки с этим интервалом.

0

Честно говоря, за то, что вы просите, единственное, что сработало для меня, это ZFS-FUSE. Существует также нативная ZFS для Linux, но она пока не очень полезна.

0

Некоторые файловые системы предоставляют возможности моментальных снимков. Создание файловой системы (в неиспользуемой области диска или в выделенном файле данных [loopback]) с использованием одной из этих файловых систем, а затем монтирование ее в том месте, где записываются ваши журналы, позволит вам сделать снимок файловой системы журналов.

Известно, что файловые системы поддерживают моментальные снимки:

  • ZFS (на основе предохранителей)
  • FBS FreeBSD
  • LFS (файловая система с лог-структурой)
  • XFS

Возможно, есть и другие, но это те, которые я могу придумать не покладая рук.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .