Чи безпечно сфотографувати привід поточного робочого накопичувача?


12

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

  • Чи можу я це зробити за ddдопомогою ОС, що знаходиться на самому hdd, чи потрібно завантажуватися з іншого пристрою, наприклад LiveCD?
  • Чи безпечно взагалі фотографувати пристрій, якщо пристрій встановлено та працює?
  • Що робити, якщо пристрій встановлено, але я впевнений, що під час роботи немає інших операцій вводу / виводу dd?

Я впевнений, що rsyncце найкращий інструмент для резервного копіювання, особливо для інкрементальних.

Але мене це цікавить dd, тому що я хочу створити резервну копію також інших пристроїв зберігання даних, і вони копіюють також дані, що зберігаються на нерозподіленому просторі. Наприклад, мій читач електронних книг використовує нерозподілений простір для зберігання uboot, ядра та інших даних.


Важливо, яку файлову систему ви використовуєте, яка вас цікавить? Деякі мають специфічні особливості для цього завдання.
Vality

Відповіді:


11

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

  1. dd читає з місця X, яке містить сміття або деякі дані
  2. Файлова система записує до місця X
  3. Filesystem записує на розташування X + 1 вказівник на розташування X
  4. dd читає з місця X + 1 посилання на розташування X

З точки зору резервного копіювання ви отримуєте дані про сміття. Однак існує кілька способів її вирішити:

  • Заморожуйте файлову систему за допомогою команди, визначеної для файлової системи (я вважаю, що xfs_freezeце одна, і я не знаю жодної іншої, - але такий варіант існує принаймні теоретично)
  • Створіть знімок lvm та скопіюйте з нього. Копія буде як би ви перезавантажили комп’ютер (за винятком переупорядкування жорсткого диска), тому це буде брудна файлова система, але копія буде атомною. Зауважте, що деякі файлові системи, такі як XFS, потрібно спочатку заморозити.
  • Використовуйте rsync, як пропонують інші. Тепер копія безпечна, і вам не потрібен LVM, але копія не є атомною. Тож, хоча це дозволяє уникнути вищевказаної проблеми на рівні файлової системи, вона все ще може зіткнутися з проблемами з файлами (досить малоймовірно, але можна уявити відсутні файли, коли mv виконується, наприклад, у фоновому режимі)
  • Використовуйте файлову систему з знімком, наприклад, btrfs , tux3 , zfs , nilfs ... Тоді ви уникаєте обох проблем - ви можете просто створити знімок і скопіювати з нього rsync, маючи повну атомність. Зауважте, що така файлова система часто має експериментальний характер.

Як остання примітка - ddможливо, це не найкращий спосіб резервного копіювання. Він копіює повний диск, який часто марно потрапляє під час копіювання "сміття". Якщо вам потрібно мати зображення диска, щось на зразок партмайстру може бути краще. Якщо ви не кращий варіант, це використання або використання rsync, смоли в диференціальному / поступовому режимі тощо, або повна система резервного копіювання, наприклад, бакула , tarsnap або одна з багатьох інших. Дедуплікація даних може творити чудеса для розмірів резервних копій.


1
+1 Це єдина відповідь, яка насправді намагається відповісти на це запитання, чудово зроблена для того, щоб прочитати те, що запитують оператори, а не роздумувати про те, як ДД погано.
Vality

+1 за гарну відповідь. Але я не згоден з рентуванням. Dd непоганий. Це просто недоречно і пояснювати, чому це так, це справа.
Геннес

Пункт 4 кулі має ті ж обмеження, що і №2, правда? Додаток може бути посеред видачі записів, і знімок нічого не знає про транзакцію на рівні програми.
Ben Voigt

Дякую, це відповідає на питання. Відповідь goldilocks також хороша, але мені цікаво створити резервну копію не тільки свого HDD, але й інших пристроїв зберігання даних, і, можливо, мені довелося це записати раніше.
Марко Сулла

@BenVoigt - певною мірою - він виключає один шар (файлову систему), а AFAIK - це "більш крихкий". Тим не менш, у деяких випадках ви можете знайти напівзаписані файли, але якщо програма не справляється з ними, вони можуть бути пошкоджені і в багатьох інших обставинах (OOM, збій тощо), тому правильно написана програма повинна мати справу з цим.
Maciej Piechotka

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 Це не має жодних переваг, крім того, що зображення монтується. Я додав, що у випадку, якщо мета оперативної програми тут - створити образ, який можна використовувати в сирому вигляді. В іншому випадку краще використовувати архів, оскільки архів не має фіксованого розміру. Я додам більш чіткий застереження щодо цього.
goldilocks

Є, я не вважав цього. Ще класний спосіб зберігання файлів.
Крік

2
@mpy І GNU coreutils, cpі rsync мають можливість -xуникнути рекурсії в інші файлові системи. Відповідь Maciej найкраще пояснює, чому ddтут абсолютно недоречно (майже гарантовано створити непридатну копію, якщо ви не вживати заходів безпеки, перелічених Марком , через записи, які інакше трапляться під час копіювання).
Жил 'ТАК - перестань бути злим'

2
ddне копіює на диск речі, які не є реальними каталогами, тому я не впевнений, звідки береться ваша перша точка. Наприклад, встановлені пристрої /mnt, вузли /procтощо не будуть частиною даних, які ddзахоплюються, оскільки їх немає на диску. Для відключених файлових систем ddцілком справедливо; ви закінчуєте точний дублікат. Єдина причина, що це неприйнятно для змонтованих файлових систем - це те, що дані в системі можуть змінюватися / бути частково записаними протягом тривалого періоду часу, необхідного ddдля роботи.
Джейсон C

1

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

Деякі застереження:

  • ви повинні додати відповідні параметри алфавіту-супу
  • шляхи досить критичні
  • потрібен список виключень, який відрізнятиметься для кожної ОС та, можливо, для кожної конфігурації

Деякі переваги rsync перед іншими методами, такими як смола:

  • ви можете зупинити і запустити резервну копію в будь-який час
  • багато варіантів для обробки замінених файлів, таких як видалення на вимогу, видалення раніше, переміщення .....
  • відновлені (або повторні) резервні копії набагато швидше, ніж інші методи, оскільки попередньо скопійовані файли пропускаються. (Збільшення частоти швидкості в 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- що буде працювати, навіть якщо у вас є такі речі, як chroots або fs namespaces.
Maciej Piechotka

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

До «несуттєвих програм» для вимкнення критично доведеться включати підсистему реєстрації даних, яку я б не вважав суттєвою.
Жил 'ТАК - перестань бути злим'

@Gilles, для створення образу диска завантажувального диска будь-яка програма, яка безпосередньо не бере участь у створенні зображення, не є істотною.
Марк

Тут, можливо, варто згадати режим одиночного користувача.
Vality

1

Використовуйте Clonezilla , серйозно. Це найкраща утиліта Norton Ghost на основі Linux з відкритим кодом, що працює з відкритим кодом. Він буде робити як розділ, так і повне клонування диска, або диск на диск, або диск на файлову систему (зберегти як файл). Він підтримує більшість файлових систем Linux, NTFS, FAT32 та багато іншого. Він може економити на внутрішньому диску, зовнішньому диску або навіть по мережі на SMB або NFS.

Він дуже простий у використанні і заощадить вам багато часу.

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


+1: він не відповідає на запитання, але, здається, це є гарною пропозицією для резервного копіювання hdd.
Марко Сулла
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.