LINUX.ORG.RU

Снова о бекапировании с помощью dd

 ,


1

5

Сорри за избитые вопросы, но ннада :-)

Разочаровался в бекапирующих утилитах, и решил остановится на православном dd
Освоил пока только бекапирование, т.е. «туда».
Восстановлением, т.е. «обратно, еще не занимался, потому что уже и по бекапированию возникли некоторые вопросы.

Например, есть такая структура диска:

/device/sda1	350M	NTFS
/device/sda2	 16G	NTFS
/device/sda3	300M	Linux
/device/sda4	 39G	Extended
/device/sda5	 15G	Linux
/device/sda6	  4G	Linux swap

Загружаюсь с LiveCD и выполняю бекап на другой комп такой командой -
dd status=progress if=/dev/sda conv=sync,noerror bs=64k | gzip -c | ssh chukcha@192.168.1.100 "dd of=sda.img.gzip bs=64k"
Бекап прекрасно выполняется и заодно сжимает на лету эти разделы примерно в 5 раз (!)
(кстати, gzip увы, однопоточный, так что лучше 7zip)

Это замечательно, но смущает связка conv=sync,noerror - на кой ляд она здесь надо?

Понятно только что noerror игнорирует битые сектора.
Однако я не сторонник такого копирования, если заранее известно, что диск целый.
Вот если действительно обнаружатся битые сектора - тогда и понадобится такое игнорирование.

Так вот, для копирования без игнора нужно исключить noerror - только вот как?
Исключить нужно только noerror, или всю связку conv=sync,noerror?

Не могу самостоятельно ответить на этот вопрос, потому что не пойму, на кой сдался здесь параметр
sync, который толкуется как

Дополняет каждый входной блок значениями NUL до размера ibs; при использовании с block или unblock, используется блок с пробелами, а не NUL.

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

★★★★★

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

Без noerror при наличии ошибки чтения dd прекратит работу. Если устраивает такое, можешь прибить. sync добивает блок нулями, на случай, если объем диска не кратен bs. Ну или в случае битого сектора.

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

Без noerror при наличии ошибки чтения dd прекратит работу. Если устраивает такое, можешь прибить.

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

Значит noerror можно исключить?
А sync нужно оставить, что ли? в виде conv=sync ?

Но зачем? Зачем добивать блок нулями? Пусть будет в «хвосте» блока что угодно - нули, единицы, пятерки - разве это так важно?

chukcha ★★★★★
() автор топика

нет смысла объем в bs=64k сжимать несколькими потоками..

anonymous2 ★★★★★
()

conv=sync,noerror

Это такой способ получить кривой дамп.

Dd читает исходные данные блоками фиксированного размера. В твоём случае ты запрашиваешь размер в 64 * 1024 байт. Читает он вызовом read(), который может вернуть как 64 * 1024 байт, так и меньше. Если он возвращает меньше, то dd просто считает, что read() вернул 64 * 1024 байт. Перед чтением dd зануляет внутренний буфер, поэтому всё выглядит как дополнение прочитанных данных NULями до 64 * 1024 байт.

Есть несколько причин, по которым read() может вернуть меньше данных, чем запрашивалось. Я знаю две: «файл кончился» и «ядро решило прервать вызов». Если окончание файла ещё можно предсказать, то вот что там у ядра случится предсказать вряд ли выйдет. Если подобное произойдёт, то в выходной файл из-за conv=sync уйдёт полный блок, а вот во входном файле смещение будет меньше блока. В итоге у тебя весь образ съедет на сколько-то байт.

А, и ещё conv=sync округлит размер выходного файла вверх до ближайшего множителя размера блока. Из входного файла в 6 байт будет сделан файл в 65536 байт. То есть с conv=sync ты ещё и информацию о размере файла частично теряешь. Это уже гарантированно, каждый раз.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 2)
Ответ на: комментарий от chukcha

В вашем примере sync имеет смысл только вместе с noerror. Чтобы при ошибке чтения сектора записываемый блок был добит нулями и тогда последующие блоки запишутся без смещения. Но при этом нужно бы делать размер блока равный размеру физического сектора носителя.

Сжимать образ диска это хорошо, только сложно понять потом какого он размера в несжатом виде, да и подмонтировать ФС из такого образа сложно. Так что может их лучше расжимать из gzip и зажимать в mksquashfs...

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

и тогда последующие блоки запишутся без смещения

Зато читаться блоки будут со смещением. Использовать conv=sync или conv=sync,noerror это очень плохая идея.

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

Тут https://superuser.com/questions/622541/what-does-dd-conv-sync-noerror-do приведён пример, что при bs=512, выходные файлы команд dd и ddrescue совпадают. Правда, там «сбойный» диск эмулировали через dmsetup. Так что в горящем танке при отсутствии ddrescue и бекапов, я буду пытаться дампить посыпавшийся винт командой:

dd bs=512 conv=noerror,sync if=/dev/...

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

приведён пример, что при bs=512, выходные файлы команд dd и ddrescue совпадают

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

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

Но практически везде советуют использовать dd именно с conv=sync,noerror.

Положим, переписывают друг у друга, не думая. А как тогда правильно делать образ раздела и/или диска?

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

Парни, спасибо, пока я очень внимательно изучаю ваши мнения, потом отпишусь.

Но вот насчет этого -

я бы использовал partclone

отвечу сразу: фтопку!!!

Потому что:

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

Вы же понимаете, что это значит - доверится интеллекту какой-то утилиты насколько хорошо она разбирается в тонкостях файловых систем.
Да никогда такие утилиты не будут толком разбираться в нюансах ФС! Рано или поздно их кодер где-то чуть-чуть ошибется в алгоритме анализа ФС - и прощай, бекап!

Когда-то в древние долинуксовые времена я так погорел на такой «интеллектуальной» утилите, емнип, называлась Ghost.
Наклепал ею кучу бекапов дисков с вынь98, и однажды, когда потребовалось их восстановить, получилась полная ж.опа - ФС получилась настолько битая, что вында хромала на все 3 ноги.

Потом нашел нормальную dumb утилиту, без «нейронных сетей» - Partition Magic, и вот ею потом делал много бекапов и восстановлений, и сбоев ни разу не было.

Тогда я получил хороший урок, и теперь убежден:

- утилита для бекапирования разделов должна быть простой как винтовка Мосина и иметь единственное право:

ТОЛЬКО ТУПОЕ КОПИРОВАНИЕ БЛОКОВ!

И никакой другой самодеятельности!
Кому надо получать меньшие размеры, то только за счет самостоятельных (а не встроенных) архиваторов.


PS. Пока еще пользуюсь Clonezilla, но она чем-то мне не нравится, чем именно, сам не пойму.
Вариант с dd мне нравится гораздо больше.

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

Тогда я получил хороший урок, и теперь убежден:

  • утилита для бекапирования разделов должна быть простой как винтовка Мосина и иметь единственное право:

ТОЛЬКО ТУПОЕ КОПИРОВАНИЕ БЛОКОВ!

С отмонтированной файловой системы.

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

С отмонтированной файловой системы.

Это само собой :=)

chukcha ★★★★★
() автор топика

Освоил пока только бекапирование, т.е. «туда».

Отлично, теперь восстанови из этого бэкапа случайно удаленный каталог /home/chukcha/documents/work/important.

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

дальше писю сосать распаковывать образ и монтировать в луп и выковыривать из него файлик в 5 кб :) пройденный этап.

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

PS. Пока еще пользуюсь Clonezilla, но она чем-то мне не нравится, чем именно, сам не пойму.

Так там же тот же dd под капотом выбрать можно. :)

frunobulax ★★
()

Это замечательно, но смущает связка conv=sync,noerror - на кой ляд она здесь надо?

Это прекрасно, утро сделано. Тебя никто за язык не тянул? Злые духи на ушко не шептали: «конв… равно… синк… запятая…»? Значит на кой ляд ты это написал, на тот и надо.

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

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

Ты хочешь у меня спросить какую задачу ставят в данном случае? Или какое именно страдание выбирают?

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

Неловкий вопрос — а зачем вам fs-level backup, если ваш юзкейс — доставать файлики в 5кб? Zip? Vcs? Снепшоты? Просто копия каталога, наконец (возможно, с xz на каждый файл по отдельности)?

gremlin_the_red ★★★★★
()

и заодно сжимает на лету эти разделы примерно в 5 раз (!)

Чую, кто-то в треде не шифрует диски.

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

И тебе неловкий вопрос — а какого экзотического фрукта надо шифровать диски? Ты стесняешься своего /bin/bash? Plasma Vault для кого придумали?

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

а какого экзотического фрукта надо шифровать диски?

Вот от тебя не ожидал «мненечегоскрывать»-риторики. Живи скучной жизнью, не работай нигде, можешь хоть ноуты терять — твоё право.

Ты стесняешься своего /bin/bash?

У меня нет /bin/bash, но систему может воспроизвести любой анон в одну команду, тут все публично: https://github.com/t184256/nix-configs

Plasma Vault для кого придумали?

Понятия не имею, инопланетян, которые забыли зашифровать диск при установке и теперь хотят страдать фигнёй?

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

Ты хочешь у меня спросить какую задачу ставят в данном случае?

Я хочу, чтобы ты признал свой «man mount» глупым комментарием.

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

А может у него просто 80% места свободно.

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

дык я и перешел на squashfs файлов раздела, xz кстати в нем тоже есть.
если говорить про восстановление корневого раздела на чистый носитель, то после разворачивания системы надо будет восстановить бут-сектор груба - небольшая элементарная операция.
при этом тут тебе и удобство монтирования образа с произвольным доступом, год назад реально одну железку переводил с 32бит на 64бита, накатил новенькую чистенькую систему, образ старой системы смонтировал в /mnt и не торопясь восстановил настройки на новой системе. удобно, просто и очень наглядно.
ну и отсутствие захватывания ошметков стертых блоков в бекап и т.д.
минус один - пара дополнительных действий для рут-раздела.

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

Что?

Ну давай в твоем формате отвечу. Шифровать стоит просто всё, благо AES-NI уже 8 лет на рынке. Тратить время на избирательное шифрование — вот это маразм и дебилизм.

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

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

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

маразм и дебилизм основа некоторых военных систем.

pfg ★★★★★
()

кстати, gzip увы, однопоточный

pigz уже давно существует.

Остальное уже написали.

Дамп блочного устройства - путь не очень, слишком большой оверхед

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

Бесполезная совершенно. Попробуй любой сценарий восстановления, ужаснись и забудь про dd. И другим передай.

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

ты жмешь выхлоп dd, он представлен в виде одного единственного потока, какие нахренъ каталоги, ты сейчас о чём ??

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

А так, на всякий случай. Если он каталоги не жмет (хотя при бекапе разделов он действительно не нужен), то зачем вообще с таким кастратом иметь с ним дело? 7zip же!

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

Изучи разницу бежду компрессором и архиватором )

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

Не вижу ничего плохого в «интеллектуальных» юзер-френдли утилитах.

  1. Периодическая авто-проверка целостности бэкапа - эта одна из стандартных фич таких утилит. Конечно, и здесь может проскользнуть баг, поэтому…

  2. Нужно делать резервное копирование как минимум двумя разными программами (в два разных места). Ошибкам подвержен любой софт, самописные скрипты вокруг coreutils не исключение. Но вероятность просёра бэкапов снижается экспоненциально с увеличением числа бэкапирующих программ. Тут также уместно припомнить «правило 3-2-1»

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

у меня два варианта делчев и крупский «штоп памяти меньше жрало и скорость была» и «так было написано»

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