Безопасно ли брать образ текущего рабочего диска?


12

Я должен сделать резервную копию моего жесткого диска. Я хочу использовать ddи поместить изображение на внешний жесткий диск.

  • Могу ли я сделать это, используя ddОС, которая находится на самом жестком диске, или мне нужно загружаться с другого устройства, например с LiveCD?
  • Безопасно ли вообще делать образ устройства, если оно установлено и работает?
  • Что делать, если устройство смонтировано, но я уверен, что во время работы другой операции ввода-вывода не ddпроисходит?

Я уверен, что rsyncэто лучший инструмент для резервного копирования, особенно для инкрементных.

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


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

Ответы:


11

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

  1. dd читает из местоположения X, которое содержит мусор или некоторые данные
  2. Файловая система записывает в местоположение X
  3. Файловая система записывает в местоположение X + 1 указатель на местоположение X
  4. dd читает из местоположения X + 1 ссылка на местоположение X

С точки зрения резервного копирования вы получаете мусорные данные. Однако есть несколько способов обойти это:

  • Заморозить файловую систему с помощью команды, специфичной для файловой системы (я верю, что xfs_freezeона одна, и я не знаю никакой другой, но такая возможность существует, по крайней мере, в теории)
  • Создайте снимок lvm и скопируйте с него. Копия будет как если вы перезагрузите компьютер (за исключением переупорядочения жесткого диска), так что это будет грязная файловая система, но копия будет атомарной. Обратите внимание, что некоторые файловые системы, такие как XFS, должны быть сначала заморожены.
  • Используйте rsync как предложено другими. Теперь копия безопасна, и вам не нужен LVM, но она не является атомарной. Таким образом, несмотря на то, что он избегает вышеуказанной проблемы на уровне файловой системы, он все равно может столкнуться с проблемами с файлами (довольно маловероятно, но можно представить пропущенные файлы, когда mv выполняется в фоновом режиме, например)
  • Использование файловой системы с snapshoting , такие как Btrfs , tux3 , ZFS , nilfs ... Тогда вы избежите обе проблемы - вы можете просто создать снимок и скопировать из него Rsync , имеющий полную атомарность. Однако обратите внимание, что такая файловая система часто имеет тенденцию быть экспериментальной.

И последнее замечание - ddвозможно, это не лучший способ резервного копирования. Он копирует полный диск, что часто приводит к расточительству, поскольку вы копируете также и «мусор». Если вам нужны образы дисков , лучше использовать partimage . Если вам не нужен лучший вариант, используйте rsync, tar в дифференциальном / инкрементном режиме и т. Д. Или систему полного резервного копирования, такую ​​как bacula , tarsnap или одну из многих других. Дедупликация данных может творить чудеса с размерами резервных копий.


1
+1 Это единственный ответ, который фактически пытается ответить на этот вопрос, превосходно сделанный для того, чтобы фактически прочитать то, что спрашивает опера, и не разглагольствовать о том, как дд плох.
Vality

+1 за хороший ответ. Но я не согласен с разглагольствованиями. Дд не плохо. Это просто неуместно, и объяснять, почему это так, - это хорошо.
Хеннес

Пункт 4 имеет те же ограничения, что и №2, верно? Приложение может быть в процессе выдачи записей, а моментальный снимок ничего не знает о транзакции уровня приложения.
Бен Фойгт

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

@BenVoigt - в некоторой степени - устраняет один слой (файловую систему), а AFAIK - «более хрупкий». Тем не менее, в некоторых случаях вы можете найти наполовину записанные файлы, но если приложение не обрабатывает их, файлы могут быть повреждены и во многих других обстоятельствах (OOM, сбой и т. Д.), Поэтому правильно написанное приложение должно с этим справиться.
Мацей Пехотка

7

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

  • Это будет тратить много времени на копирование пустых разделов раздела.

  • Это может привести к несоответствиям, если файловая система в настоящий момент смонтирована, отчасти потому, что она является объектом уровня ОС и может быть не синхронизирована с базовым блочным устройством. syncПервоначальный вызов не очень поможет в этом, так как процесс не мгновенный.

Используйте cp -aили rsyncвместо. Затем вам, конечно, нужно создать целевой раздел, так что он не так прост, но гораздо безопаснее и гибче. Если вам нужно создать образ файловой системы , см. Ниже.

Если вы собираетесь скопировать корневую файловую систему, абсолютно не используйте dd. Вы должны использовать что-то вроде rsync -ax(или cp -axв отдельных каталогах верхнего уровня), потому что есть множество вещей, которые НЕ должны быть в копии . В Linux это включает в себя:

/dev
/lost+found
/mnt
/proc
/run
/sys
/tmp

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

Если вы хотите создать файл образа корневой файловой системы (или любой файловой системы), создайте пустой файл образа - это подходящее использование для dd:

dd if=/dev/zero of=whatever.img bs=1024 count=1000000

Это изображение размером 1024 МБ (1000000 * 1024). Отрегулируйте, countесли хотите, другой размер. Создайте, например, extфайловую систему в файле :

mke2fs whatever.img

Он предупредит вас, что это не реальное блочное устройство. Приступить. Теперь смонтируйте файл образа:

mount whatever.img /mnt/img

/mnt/imgдолжен существовать, но может что угодно. Теперь вы можете rsync(или cp -a) в /mnt/img. Содержание останется внутриwhatever.img когда вы отключите его.

Тем не мение...

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

tar -czf myarchive.tar.gz [the directory path]

Затем вы можете развернуть его в существующем (пустом или ином) разделе, поместив его на верхний уровень и используя:

tar -xzf myarchive.tar.gz

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


+1 запись в пустой файл изображения очень удобна, но какие преимущества она имеет по сравнению с сохранением в архиве .tar или .tgz?
Крик

@Creek У него нет никаких преимуществ, кроме того, что изображение можно монтировать. Я добавил, что в случае, если целью ОП здесь является создание изображения, которое можно использовать в сыром виде. В противном случае лучше использовать архив, поскольку архив не имеет фиксированного размера. Я добавлю более ясное предупреждение об этом.
Златовласка

Понял, я так не думаю. Все еще классный способ хранения файлов.
Крик

2
@mpy В GNU coreutils cpи rsync есть возможность -xизбежать рекурсии в другие файловые системы. Ответ Мачея лучше всего объясняет, почему ddздесь абсолютно неуместно (почти гарантированно получится непригодная копия, если вы не примете меры предосторожности, указанные Марком , из-за записей, которые в противном случае произойдут во время копирования).
Жиль "ТАК ... перестать быть злым"

2
ddЯ не буду копировать на диск вещи, которые не являются настоящими каталогами, поэтому я не уверен, откуда исходит ваша первая мысль. Например, подключенные устройства /mnt, узлы /procи т. Д. Не будут частью данных, которые ddсобираются, поскольку они не находятся на диске. Для несмонтированных файловых систем ddэто совершенно справедливо; вы получите точную копию. Единственная причина, по которой он не подходит для смонтированных файловых систем, заключается в том, что данные в системе могут изменяться / частично записываться в течение длительного периода времени, необходимого ddдля работы.
Джейсон C

1

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

Некоторые предостережения:

  • Вы должны добавить соответствующие варианты алфавитного супа
  • пути довольно критичны
  • требуется список исключений, и он будет отличаться для каждой ОС и, возможно, для каждой конфигурации

Некоторые преимущества rsync перед другими методами, такими как tar:

  • Вы можете остановить и запустить резервное копирование в любое время
  • много опций для обработки замененных файлов, таких как удаление по требованию, удаление до, перемещение .....
  • Возобновленные (или повторные) резервные копии выполняются намного быстрее, чем другие методы, поскольку ранее скопированные файлы пропускаются. (Увеличение скорости в 20 раз является обычным)
  • опция --link-dest может создавать версированные резервные копии, при этом копируя только новые файлы

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


1

Это зависит от того, что вы подразумеваете под «текущей рабочей системой». Если вы просто хотите избежать использования загрузочного диска и не беспокоиться о нарушении работы служб на компьютере, это возможно:

  1. Завершите работу всех несущественных программ (в основном все, кроме корневой оболочки, в которой вы работаете - не пытайтесь сделать это с X-терминала, используйте настоящую консольную оболочку). Однопользовательский режим может помочь в этом.
  2. Если у вас есть подключенные диски, отличные от системного корня, размонтируйте их. Не отключайте виртуальные файловые системы, такие как / proc, / sys или / dev.
  3. Очистить кэшированные данные на оставшемся диске: sync
  4. Установите на корневую файловую систему только для чтения: mount -o ro /.
  5. Смонтируйте внешний жесткий диск (вы, вероятно, получите предупреждение о невозможности записи на него /etc/mtab; игнорируйте его).
  6. Сделайте резервную копию.
  7. Размонтируйте ваш внешний жесткий диск.
  8. Перезагрузка. Вы довольно сильно запутались в том, что ваша система попала сюда, и перезагрузка - самый быстрый способ вернуть ее в нормальное состояние.

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


Обратите внимание, что шаг 4 может быть опасным для некоторых файловых систем, поскольку они записывают даже в режиме только для чтения. Кроме того, в более современных системах (Linux 3. что-то, на что я верю) вы можете просто ссылаться /etc/mtabна /proc/self/mountних, что будет работать, даже если у вас есть такие вещи, как пространства имен chroot или fs.
Мацей Печотка

1
@MaciejPiechotka Я не знаю ни одной файловой системы, которая пишет, когда монтируется в режиме только для чтения, и я нахожу это очень странным. Некоторые файловые системы записывают при монтировании в режиме только для чтения, если файловая система ранее не была чисто размонтирована, поэтому этот шаг mount -o remount,ro /может записываться. Но как только эта команда вернется, в какой ситуации будут происходить последующие записи?
Жиль "ТАК - перестань быть злым"

«Несущественные программы», которые необходимо закрыть, должны включать подсистему журналирования, которую я не считаю несущественной.
Жиль "ТАК - перестань быть злым"

@ Жиль, для целей создания образа диска загрузочного диска любая программа, непосредственно не участвующая в создании образа, не является необходимой.
Марк

Здесь стоит упомянуть однопользовательский режим.
Vality

1

Используйте Clonezilla , серьезно. Это лучшая утилита, похожая на Norton Ghost, с открытым исходным кодом. Он будет выполнять клонирование как разделов, так и полных дисков, либо с диска на диск, либо с диска на файловую систему (сохранить как файл). Он поддерживает большинство файловых систем Linux, NTFS, FAT32 и многое другое. Он может сохранять на внутренний диск, внешний диск или даже по сети на общих ресурсах SMB или NFS.

Он очень прост в использовании и сэкономит вам много времени.

Изменить: чтобы ответить на вопрос, нет, вы не можете ddбольшинство файловых систем, пока они смонтированы, потому что вы рискуете получить несогласованную копию вашей файловой системы, поскольку чтение с блочного устройства не является атомарным. Например, если вы копируете 100 блоков, система могла обновить первый блок и последний блок, пока вы были только на полпути, что означает, что ваша копия будет содержать измененный последний блок, но не первый.


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