Rsync -avzHP следует за жесткими ссылками, а не копирует их как жесткие ссылки


13

Я использую rsnapshot для создания ежечасных / ежедневных / еженедельных / ежемесячных резервных копий моего "рабочего" ресурса. Сейчас я пытаюсь скопировать весь каталог резервного копирования на внешний диск с помощью rsync.

Я использовал эту команду / параметры в сеансе экрана (да, rsync-exclude.txt находится в папке, из которой я запускаю команду)

rsync -avzHP --exclude-from 'rsync-exclude.txt' /share/backup/ /share/eSATADisk1/backup/;

Все это работает на QNAP TS-439, внутренний диск представляет собой EXT4 с одним диском (без RAID), внешний диск - EXT3.

Происходит следующее: Rsync следует за каждой жесткой ссылкой и копирует реальный файл вместо воссоздания обновленной жесткой ссылки на внешнем диске. Я не сразу узнал об этом, поэтому внешний диск оказался разорван с копиями ххх тех же файлов.

Чего я хочу добиться: скопировать всю файловую структуру, сгенерированную rsnapshot, на внешний диск, сохранив жесткие ссылки для экономии места. Примечание: это не обязательно должно быть сделано с помощью rsync.

Спасибо за ваши идеи и время. Я буду признателен за вашу помощь, большое время.

Обновление: я узнал, что rsnapshot не использует символические ссылки, он использует жесткие ссылки, поэтому теперь я использую опцию -H, которая должна сохранять структуру жестких ссылок в соответствии с Rsnapshot для нескольких назначений (или поддерживать структуру жестких ссылок), но все равно не будет работать ... что мне здесь не хватает?

Обновление 2: я нашел другое мнение / утверждение по этой теме здесь: rsync с --hard-links замораживает Стивен Понедельник предлагает не пытаться rsync больших файловых структур, содержащих жесткие ссылки, так как он поглощает много памяти и является сложной задачей для rsync. Поэтому, вероятно, лучшим решением было бы создание .img структуры данных, которую я пытаюсь сделать резервной копией. Что вы думаете?


Я делаю то же самое, что и вы! +1. Попробую подход dd
mmalmeida

Ответы:


10

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

Точное расположение этого порога может зависеть от вашей оперативной памяти и общего количества жестких ссылок (и, возможно, ряда других вещей), но я обнаружил, что нет смысла пытаться определить его точно. Что действительно важно, так это то, что этот порог слишком легко преодолеть в реальных ситуациях, и вы не будете знать, что вы его переступили, пока не настанет день, когда вы попытаетесь запустить rsync -aHили забастовку, cp -aкоторая в конечном итоге терпит неудачу ,

Я рекомендую следующее: скопируйте жестко связанную файловую систему как единое целое, а не как файлы. То есть скопируйте весь раздел файловой системы как один большой двоичный объект. Для этого есть ряд инструментов, но наиболее распространенным является dd.

При наличии стоковой прошивки ваш QNAP NAS также должен быть ddвстроенным fdisk. С помощью fdisk, создайте раздел на целевом диске, по крайней мере, такой же, как исходный раздел. Затем используйте ddдля создания точной копии исходного раздела во вновь созданном целевом разделе.

Во время выполнения ddкопии вы должны убедиться, что в исходной файловой системе ничего не изменится, чтобы в конечном итоге вы не получили поврежденную копию в месте назначения. Один из способов сделать это - обратиться umountк источнику перед началом процесса копирования; Другой способ - подключить источник в режиме только для чтения.


Предположим, я никогда не использую жесткие ссылки вне каталога резервных копий rsnapshot. Буду ли я по-прежнему сталкиваться с проблемами? Мне действительно не хватает места на жестком диске, но я хочу сделать резервные копии rsnapshot. В настоящее время мой диск заполнен.
Шридхар Сарнобат

Я думаю, что ударил ситуацию, которую вы указали. У меня есть резервная копия со множеством снимков, созданных с помощью rsync. В нем много файлов со многими жесткими ссылками. Общее использование диска составляет около 200G. Я копирую его в другой раздел, используя 'rsync -avH'. Но после 4 (или 5?) Дней и ночей процесс копирования все еще продолжается. Я думаю, что rsync полностью сбит с толку общим количеством жестких ссылок в исходном каталоге.
Гуанлян

В Ubuntu 18.04 это --hard-links(с 's').
nobar

1

-l для символических ссылок, зачем делать что-то для жестких ссылок?

(Извините, это ответ, а не комментарий, у меня еще нет прав на комментарии, и на этот ответ нужен ответ)

Еще одно замечание, которое должно быть комментарием: это все аппаратное обеспечение или вы на виртуальной машине, монтируете сеть?

редактировать

игнорировать мой предыдущий комментарий о том, почему вы используете жесткие ссылки, я пропустил rsnapshotкомментарий.

Было бы полезно иметь тест, который сначала проверяет rsync между двумя локальными каталогами на локальном диске, а затем на вашем удаленном диске. Этот небольшой тест показывает -Hвариант работы, как и ожидалось. -iВариант для lsшоу инодов, тем самым показывая , что ссылки были сохранены без каких - либо дополнительных копий.

$ rsync -avzHP src/ dest
sending incremental file list
created directory dest
./
file111_prime.txt
           9 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/3)
file111.txt => file111_prime.txt

sent 156 bytes  received 59 bytes  430.00 bytes/sec
total size is 18  speedup is 0.08

$ ls -liR
.:
total 8
414044 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 dest
414031 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 src

./dest:
total 8
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

./src:
total 8
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

Последующий тест rsync -avzHP src/ host:/tmpна удаленном хосте все еще поддерживал жесткие ссылки


Вы совершенно правы, после некоторых дальнейших исследований я обнаружил, что rsnapshot использует не символические, а жесткие ссылки. Я обновил свой вопрос соответственно. Поэтому решение должно использовать -H и копировать весь каталог (как я это делаю), чтобы сохранить структуру жестких ссылок, созданную rsnapshot, но она все еще не работает. Когда я начинаю копировать что-либо из daily.0, копируются, а не только измененные файлы. // И да, я использую Qnap TS-439 и внешний Lacie Drive для этой операции.
Woerndl

Можете ли вы уменьшить эту проблему, имея каталог источника тестов и каталог назначения тестов с двумя файлами в источнике, жестко связанными вместе? Кроме того, как вы определяете, что ссылка не была обработана правильно и, наконец, зачем использовать жесткие ссылки, если вы читаете длинный текст для -Hна странице руководства, вы можете увидеть, что есть несколько предостережений, которые я бы сказал, попробуйте держаться подальше от
жестких

Я настрою тестовый пример и буду держать вас в курсе. Спасибо вам большое за ваши идеи.
Woerndl

1

Это длинный путь, но если вы не можете найти другое решение, я бы посоветовал попытаться отформатировать USB-накопитель как EXT4. Может быть, это может быть проблема: https://bugzilla.samba.org/show_bug.cgi?id=7670

При наличии достаточно жестких ссылок в исходной папке и достаточно небольшого целевого тома копирование с помощью rsync --hard-links может завершиться неудачно. Rsync терпит неудачу из-за исчерпания максимального количества жестких ссылок в месте назначения <...> реальная проблема не в rsync, а в базовой файловой системе.


Спасибо за ваше участие в моей проблеме! Похоже, это связано с самбой. Мой диск напрямую подключен к NAS.
Woerndl

1
Привет, нет, эта проблема не связана с Samba. Это домашний сайт rsync: rsync.samba.org
Motsel,

0

Вы пытались добавить -lопцию?

Я знаю, что страница руководства говорит, что она включена, -aно страницы руководства не всегда на 100% точны.


Спасибо за ваш отзыв. Мне пришлось обновить мой вопрос: Rsnapshot не использует символические ссылки, а жесткие ссылки для построения своей структуры добавочного резервного копирования. Так что, в любом случае, я не помогу, но должен, что, к сожалению, тоже не работает.
Woerndl
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.