LINUX.ORG.RU
ФорумAdmin

Как быстро сохранить бэкап одновременно на два разных диска локальной машины?

 , ,


1

3

Есть папка на внутреннем жёстком диске ноутбука содержащая огромное количество самых разнообразных файлов. Я условно назову её «Коллекция». Бэкап делается в двух экземплярах, один экземпляр хранится на том же разделе диска что и сама коллекция, а второй экземпляр сохраняется на внешний USB-HDD.

Обычно для сохранения я последовательно запускал команду вида «cp -vax», однако недавно я задумался над тем как этот процесс ускорить. Первое что приходит в голову это параллельно запустить две «cp», одна будет копировать коллекцию на внутренний диск, а другая на внешний. Однако даже это ещё не предел, ибо компьютер будет фактически дважды считывать с диска одни и теже файлы. В идеале компьютер должен один раз считать файл с диска и потом скопировать считанные данные в два места одновременно.

Однако как это сделать? Сам «cp» тут бесполезен (если только не пробовать написать целый отдельный хитромудрый скрипт с последовательным копированием файлов в RAM-диск, а с него уже в пункты назначения.) Мне нужна программа которая позволяет это легко сделать и которая при этом сохраняеть всё то, что сохраняет «cp -vax»(вроде прав и т.д.). То есть, софтина работающая по принципу «один раз прочитал - два раза записал, причём записал одновременно».

Deleted

компьютер будет фактически дважды считывать с диска одни и теже файлы

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

Но если сильно хочется поизвращаться, то можно на основе tee написать скрипт на два десятка строк, который разливает данный файл в две разные директории и копирует права, и потом еще один скрипт на основе find, который вызывает первый скрипт для всех файлов в исходной директории.

ddos3
()
Ответ на: комментарий от anonymous

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

Deleted
()
Ответ на: комментарий от no-such-file

А man почитать?

Прежде чем тратить драгоценное время на чтение man я должен узнать что rsync вообще способен на то что я хочу. Будет довольно обидно если выяснится что я усердно читал man бесполезного для меня инструмента.

rsync -aq /from/here /to/here

Ну и где тут копирование в несколько мест сразу?

Мне нужно что-то вроде «cp -vax /from/here /to/here01 /to/here02» (разумеется эта команда неработоспособна ибо cp неспособен на такие выкрутасы, но думаю смысл понятен)

Deleted
()
Ответ на: комментарий от Deleted

find -exec
Правда, я не уверен, что эта фиговина поведет себя так, как надо. Хрен его знает, что там у tee в кишках.

thesis ★★★★★
()

А еще можно собрать из бэкапных разделов зеркальный софтрейд.
Кстати

один экземпляр хранится на том же разделе диска что и сама коллекция

Это воистину гениальный сценарий организации бэкапа.

thesis ★★★★★
()
Ответ на: комментарий от thesis

То есть Вы предлагаете написать скрипт в котором c помощью «find» составляется список всех файлов, а потом для каждого элемента этого списка выполняется команда навроде той что Вы указали ранее, я правильно понимаю?

Deleted
()

Два раза rsync запусти. Не трахай мозги себе.

Deleted
()
Ответ на: комментарий от thesis

А еще можно собрать из бэкапных разделов зеркальный софтрейд.

Боюсь на моём жёстком диске итак слишком тесно для таких трюков.

Это воистину гениальный сценарий организации бэкапа.

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

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от darkenshvein

Не работает. Запускал «rsync -aq /tmp/XP/ /tmp/dir01/ /tmp/dir02/», однако файлы скопировались лишь в dir02

Deleted
()
Ответ на: комментарий от nerve

Эта команда дополнительно высрет содержимое tar в консоль, а будучи запущенна в кроне - ещё и отправит админу по емейл. Но если добавить > /dev/null то будет лучший вариант. После, конечно, двух последовательных rsync.

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)

запускал команду вида «cp -vax», однако недавно я задумался над тем как этот процесс ускорить

Для начала, не помешает взглянуть на rsync.

beastie ★★★★★
()
Ответ на: комментарий от thesis

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

Deleted
()
Ответ на: комментарий от beastie

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

Deleted
()
Ответ на: комментарий от beastie

Чуваку надо так

cp src dest1 dest2 // где как я понял один из destX это локальный хард, другой - внешний хард, т.е. multi destination copy.

rsync cat1 cat2 cat3 // копирует cat1 и cat2 в cat3, так?

Я почитал ман и не увидел как сделать local multi destination copy.

anonymous
()
Ответ на: комментарий от anonymous

Да гуглил я, гуглил. Но вот про afio слышу впервые. И кстати говоря, воспользоваться им не могу ибо у меня Debian 32-bit, а сам afio доступен толко под Debian 64-bit.

Хотя ... исходники у afio доступны, может быть просто скомпилировать из них? Но получится ли у меня, ведь не случайно же эта программа доступна только под 64-разрядный Debian?

Deleted
()

а в чем проблема запускать два рсинка? Или делать последовательное копирование?

targitaj ★★★★★
()
Ответ на: комментарий от Deleted

Главный цимес его в том, что он копирует только то, что надо копировать. И только это уже +1000% к скорости. А там уже lvm snapshot и копируешь 2 раза спокойно в 2 места.

beastie ★★★★★
()
Ответ на: комментарий от Deleted

Стащи пакет с убунты, у него в завимостях тока libc6.

anonymous
()

Плюсую за rsync. Он не будет копировать одновременно, но он скопирует только измененные файлы что существенно снизит общее время работы по сравнению с cp.

anc ★★★★★
()
Ответ на: комментарий от Deleted

Ну так и копируй на свой комп по сети, через lo :)

anonymous
()

самое быстрое должно быть lvcreate --snapshot или аналог для копии на тех же устройствах. Для остальных копий - зависит; скажем, загруженные тома на дисках(которые крутятся) с большим кол-вом изменений или мелких файлов быстрее копировать целиком(dd /dev/vg/shapshot куда-то), иначе - может быть иначе.

DonkeyHot ★★★★★
()
Ответ на: комментарий от Deleted

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

Вам же говорили почитать ман? если мне не изменяет память, это опции --backup и --backup-dir, дальше думаю сами прочитаетедогадаетесь что с этим делать.

twixt
()
Ответ на: комментарий от legolegs

А понял, ты криво написал

(list) — оно не забирает stdout, а создает новый pipe и типа подставляет вместо себя fd (file descriptor)

это tee >(list) | ...

типа это tee /dev/fd/??? | ...

futurama ★★★★★
()
Ответ на: комментарий от futurama
tar cfp - /path/to/srcdir | tee >(cd dir1; tar -xf) | (cd dir2; tar -xf)

это как

mkfifo tmpfifo
tar cfp - /path/to/srcdir | tee tmpfifo | (cd dir2; tar -xf) & (cd dir1; tar -xf < tmpfifo)

Да, я опечатался выше.

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 4)
Ответ на: комментарий от legolegs

А я разве написал что-то другое?

P.S. и не забудь использовать это в bash, в POSIX sh (dash например) этого нет

futurama ★★★★★
()
Ответ на: комментарий от twixt

А у Вас самого хоть есть уверенность что rsync умеет копировать в несколько мест ЛОКАЛЬНО? Я вот сейчас курю ман и что-то ничего толкового пока не получается.

Вот что я безуспешно пытался запустить:

«rsync -av --copy-dest=/tmp/dest01/ --copy-dest=/tmp/dest02/ --files-from=/tmp/CopyMe/»

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.