EDIT: По какой-то причине сохранилась только часть моего поста. Я обновил его сейчас до полного содержания
Хотя эта тема вращается вокруг Raspberry Pi, она применима практически ко всем SD-картам, имеющим следующую настройку: файловая система занимает лишь часть общего размера карты. Короче говоря, смысл этого вопроса в том, чтобы понять, как писатьТОЛЬКОFS (или больше, если есть несколько разделов) в резервный образ. Более подробную информацию можно увидеть ниже.
Когда я начал играться с Pi после того, как купил его в декабре прошлого года, у меня было несколько повреждений SD-карты, и я потерял ее содержимое. Это произошло из-за неправильного выключения питания вместо обычного выключения, так что ничего страшного. Поскольку каждый раз мне приходилось форматировать карту, записывать на нее образ Raspbian, вставлять его в Pi, загружать плату, расширять файловую систему, переустанавливать и перенастраивать все, я начал искать лучшие решения:
- изменение размера изображения и ФС на немдозаписываю на SD карту -этотссылка прекрасно иллюстрирует, как увеличить изображение (используя
dd
и/dev/zero
в качестве входного источника) и настроитьext4
(я думаю, это EXT4 для Raspbian (исключая небольшой раздел FAT32 для загрузочных компонентов)). Это решает проблему использованиярасширить файловую системуособенность инструмента конфигурации Raspberry, которая в основном съедает остаток неформатированного пространства, будь то 2 ГБ, 4 ГБ, 16 ГБ, 32 ГБ и т. д. Конечно, увеличение образа также увеличивает время,dd
необходимое для его записи на SD-карту, однако это также позволяет сделать следующий шаг настройки, а именно - настройка установленного программного обеспечения - с помощью
chroot
илиproot
(плюсqemu
) возможно (как видноздесьиздесь) для установки/собирания всего, что вы хотите, если вы правильно смонтируете FS Raspbian иchroot
в нем. Это также важный шаг для многих сборок, требующих кросс-компиляции (например, Qt для Pi) - вы можете скомпилировать все нативно на Pi, но это займет много места и времени.
Итак, это в основном способ, которым я делаю что-то для настройки своих изображений. Проблема здесь в наборе процедур, вовлеченных в обратную операцию - взятие содержимого SD-карты и сохранение его на вашем ПК оптимальным способом. Сжатие, конечно, одна из важнейших вещей, которые вы можете сделать, однако этого недостаточно. При использовании dd
вы можете либо записать всю SD-карту (включая пустые блоки) на свой компьютер, либо выбрать размер и количество секторов, которые вы хотите. Второй способ предлагает лучшее использование хранилища, однако он требует тщательного расчета вещей. Если вы сократите все, вы можете получить сломанную FS (о, неужели я не видел этого много раз...).
Я ищу решение, очень похожее на то, чтоКлонезиллапредложения - можно клонироватьтолько те блоки, которые действительно имеют контенти сбросить остальное таким образомсокращение FSи возможность хранить полностью функциональную FS в гораздо меньшем пространстве. Я сделал это в прошлом году, когда помогал соседу спасти данные на его сломанном HDD на MacBook.
Пример: если у вас установлена Raspbian Jessie Lite, на вашей SD-карте будет занято всего около 1,3 ГБ. А теперь представьте, что карта имеет объем 32 ГБ. Конечно, со временем вы можете захотеть отформатировать ее и использовать оставшееся пространство, однако это обычно не так (по крайней мере, для меня). Поэтому, если я буду использовать ее dd
вслепую, я просто создам файл образа объемом 32 ГБ. Сжатие уберет большую часть гигабайт, но запись ее обратно на SD-карту в более поздний момент времени для восстановления некоторого предыдущего состояния вашего Raspbian будет очень, очень долгим процессом. Я также могу скопировать FS (опять же с помощью dd
). Но что, если фактическая установка (все файлы) займет всего около 600 МБ на этом разделе? Зачем мне копировать 1,3 ГБ, когда мне нужно всего 600 МБ? А что, если у меня есть SD-карта с Raspbian, на которой была использована функция «расширения файловой системы» инструмента конфигурации, и вся SD-карта отформатирована, хотя n
ее % фактически используется?
Есть идеи, как добиться этого с минимальными усилиями и доработками?
решение1
Сделайте дамп/восстановите небольшой раздел FAT dd
(если он вообще нужен), но используйте e2image -a
(изe2fsprogspackage) для основного раздела. Для восстановления на флэш-память эта -c
опция кажется полезной (она перезаписывает только то, что действительно отличается на месте назначения).
решение2
Ну, хотя это и не ответ на ваш вопрос напрямую, вот что я сделал для легкой реставрации
- скопируйте содержимое SD-карты в файл после установки всех необходимых пакетов
- заархивируйте файл с максимальным сжатием и сохраните сжатый файл данных в качестве резервной копии
- В случае повреждения восстановите файл резервной копии после архивации с помощью dd.