Raspberry pi перенос системы на другую флешку
Можно ли скопировать существующую и настроенную установку Raspbian на карту SD меньшего размера?
Когда я впервые установил Raspbian, у меня была под рукой только карта на 32 ГБ, которая явно больше необходимой
Система будет работать лучше, и карта будет работать дольше с большим количеством свободного места в основном разделе, поэтому не уменьшайте ее слишком сильно - увеличьте ее использование по крайней мере вдвое (например, если ваша система занимает 2-3 ГБ, используйте 8 ГБ, и увеличьте раздел, чтобы заполнить все доступное пространство). Обратите внимание, что если вы не увеличивали раздел с самого начала, он не будет иметь 32 ГБ, поэтому вам, возможно, не придется сокращать его. Спасибо за указание на это, но мой Raspberry в настоящее время использует всего 1,8 ГБ, потому что это действительно базовая установка. Поэтому я думаю, 4 ГБ должно быть достаточно. Я думаю, я вырос до полного размера, когда впервые установил Debian Wheezy. Теперь я сократил его до 2,5 ГБ, но все равно безуспешно. Смотрите мои комментарии ниже.В этом ответе я покажу, что нужно делать шаг за шагом, чтобы люди могли понять логику решения и уметь применять шаги в других своих проблемах.
Но, во-первых, следует отметить, что это общая проблема (не специфическая для распи) при переносе файловых систем с SD-карты на меньшую (но достаточно большую для данных) SD-карту.
Требования
Ноутбук с устройством чтения карт Micro SD и Linux (я предпочитаю Ubuntu) работает на нем.
Сокращения
Разделы SD_CARD_A
Пока PIBOX работает, мы перечисляем разделы (ненужные системные разделы здесь не отображаются).
На SD_CARD_A есть 2 раздела как / и /boot . Даже 2 ГБ не используется в общей сложности.
Резервная копия SD_CARD_A
После того, как мы завершим работу и остановим PIBOX, мы вытащим SD_CARD_A из платы PIBOX и поместим его в кард-ридер нашего ноутбука.
Разделы SD_CARD_A автоматически монтируются в нашу систему как /dev/sdc1 и /dev/sdc2 .
Мы размонтируем эти разделы из нашей системы, чтобы успешно на них работать.
Мы отображаем информацию об устройстве SD_CARD_A в деталях для подтверждения в следующих шагах.
Выше вы можете видеть, что SD_CARD_A имеет емкость 8 ГБ.
Мы клонируем SD_CARD_A в файл pibox.img.
Проверьте размер скопированных байтов, он равен значению, которое мы получили fdisk -l /dev/sdc командой.
Linux loopback module
В Linux есть модуль loopback, который позволяет нам обрабатывать файл как блочное устройство.
Загружаем петлевой модуль.
Мы находим неиспользуемый путь петлевого устройства.
Теперь мы создаем петлевое устройство для файла pibox.img.
Мы запускаем ядро об изменениях раздела.
Мы подтверждаем, если предыдущие операции были успешными.
Мы подробно отображаем информацию об устройстве обратной связи, чтобы сравнить ее с SD_CARD_A.
Выше вы можете видеть, что размер устройства обратной петли (= 7969177600 байт) и разделы совпадают с SD_CARD_A.
Основы математики
Отныне мы будем ориентироваться на раздел /dev/loop0p2 . Давайте назовем это THE_PARTITION .
Размер блока составляет 512 байт (как показано в строке, начинающейся с Units = секторы . )
THE_PARTITION начинается с блока 137216 и заканчивается на блоке 15564799, что означает, что он имеет размер 15427584 blocks (= 15564799 - 137216 + 1).
Итак, размер THE_PARTITION в байтах равен 7898923008 bytes (= 512 * 15427584).
Чтобы соответствовать THE_PARTITION в SD_CARD_B, мы хотим, чтобы он имел новый размер 3710940 blocks или другими словами 1900001280 bytes (= 512 * 3710940).
Таким образом, новый номер конечного блока 3848155 вычисляется как start block number (= 137216) + size in blocks (= 3710940) - 1 .
Файловая система против раздела
Есть 2 операции, которые не следует путать друг с другом.
- Изменение размера файловой системы. Мы уменьшим файловую систему в THE_PARTITION, установив ее размер в 3710940 blocks .
- Изменение размера раздела. Мы уменьшим THE_PARTITION, установив номер его конечного блока в 3848155 .
Сжатие файловой системы
Перед сжатием файловой системы она должна быть помечена как чистая e2fsck .
Мы сжимаем файловую систему с resize2fs .
Усадочная перегородка
Мы узнаем, что такое номер THE_PARTITION parted .
Мы уменьшаем THE_PARTITION с parted .
Мы закончили с петлевым устройством. Мы отделяем это.
Усечение файла изображения
Мы проверяем новую таблицу разделов.
На выходе ясно видно, что номер конечного блока THE_PARTITION уменьшается from 15564799 to 3848155 .
Последний блок, который мы используем 3848155 . Нумерация блоков начинается с 0. Итак, у нас всего 3848155 + 1 блок, и новый размер файла pibox.img должен быть 1970255872 bytes (= (3848155 + 1) * 512).
Усекаем файл pibox.img.
Мы проверяем новый размер файла pibox.img.
Создание SD_CARD_B
Мы поместили SD_CARD_B в картридер нашего ноутбука. Разделы SD_CARD_B автоматически монтируются в нашу систему как /dev/sdc1 и /dev/sdc2 .
Выше вы можете видеть, что SD_CARD_B имеет емкость 2 ГБ.
Мы размонтируем эти разделы из нашей системы для успешной работы на SD_CARD_B.
Мы клонируем файл pibox.img в SD_CARD_B.
Проверьте размер скопированных байтов, он равен значению, которое мы получили ls -l pibox.img командой.
Загрузка PIBOX
После того, как мы извлечем SD_CARD_B из нашего ноутбука и вставим его в плату PIBOX, мы загрузим систему и войдем в консоль PIBOX.
Мы перечисляем разделы (некоторые другие ненужные системные разделы здесь не отображаются).
@goldilocks, не проверено, но я думаю, что использование loopback необходимо. Насколько я знаю, parted не может работать с файлом образа напрямую, ему нужен интерфейс устройства для своих операций. Да, но я думаю, что вы найдете, что вам не нужно беспокоиться losetup или даже -o loop=whatever . Что касается другого поста, который я просто использую, mount -o offset=123 /imagefilepath /mntpoint и использование loopback неявно. Я полагаю, что это в целом верно для Linux - попробуйте и посмотрите. Затем вы могли бы сократить это до того, чтобы просто сказать, что разделы монтируются через виртуальное «устройство обратной связи».Когда вы используете dd if=/dev/sdx of=/path/to/image bs=1M , /dev/sdx относится ко всему «диску», поэтому изображение всегда будет размером всей карты.
Вместо этого вам нужно использовать dd if=/dev/sdxn . где n номер раздела.
Вам, вероятно, придется сделать это дважды - один раз для /boot раздела и один раз для / раздела.
Затем вам нужно будет создать разделы на новой карте, которые будут по крайней мере такими же большими, как эти два оригинальных, чтобы вернуть содержимое обратно.
Используйте что-то вроде parted (редактор разделов), чтобы уменьшить основной раздел до меньшего размера, а затем используйте инструмент, такой как Clonezilla, чтобы скопировать с теперь меньшего раздела на вашу новую карту. Вам, вероятно, придется сделать это на другом компьютере.
К сожалению, это не сработало. Я сократил раздел до 2,5 ГБ с помощью GParted. Но когда я попытался создать образ с него на USB-накопитель, он стал намного больше (4,3 ГБ - но я думаю, что он хотел скопировать все 32 ГБ и просто остановился на 4,3 ГБ из-за ограничения размера файла FAT). Я использовал команду dd if=/dev/sdx of=/path/to/image bs=1M из этой Есть ли у вас какие-либо идеи о том, как я могу просто скопировать основной раздел с 2,5 ГБ в образ и все же создать SD-карту с загрузочным Raspbian из него? Извините за поздний ответ. Я начал с SD-карты емкостью 4 ГБ, создал изображение, а затем записал это изображение на карты емкостью 8 ГБ и более. Мне еще не нужно было использовать больший раздел для всего, над чем я работал. Я не знаю инструмента, который позволил бы вам создать образ отдельного раздела на SD-карте.Создайте образ карты, используя один из уже упомянутых способов - Как сделать резервную копию моего Raspberry Pi?
Восстановите уменьшенное изображение на новой карте меньшего размера
Я уже давно rsync копирую файловые системы с одного диска на другой, без сбоев. Преимущество использования rsync заключается в том, что он копирует содержимое файловой системы, а не копирует устройство на уровне блоков; в результате, на самом деле все равно, какой размер имеют целевой и исходный диски, если на целевом диске достаточно места для хранения данных.
Вот как я бы это сделал:
- Создайте новую raspbian инсталляцию на желаемой новой карте SD меньшего размера.
- Загрузитесь в новую установку и разверните файловую систему, чтобы заполнить весь диск. Отключи пи.
- Теперь смонтируйте новую и старую карты и используйте rsync -avx oldFilesystem newFilesystem для копирования / перезаписи файловой системы на новой карте с файловой системой от старой карты.
- Наконец, загрузитесь в вашу новую систему и запустите, rpi-update чтобы убедиться, что ваша прошивка соответствует и обновлена.
После этого на вашей новой карте должна быть установлена полностью функциональная система Raspbian.
Таким образом, для этого метода (шаг 3) мне нужно 2 устройства чтения карт SD? Либо два устройства чтения карт SD, либо промежуточное устройство. Вы можете rsync старой файловой системы в папку на жестком диске, а затем rsync эту папку на вторую SD-карту, если вы не хотите, чтобы забрать устройство для чтения.Самым простым решением, которое я нашел, было сделать резервную копию исходной карты большего размера, используя команды dd, описанные выше, а затем восстановить образ на карту меньшего размера, используя что-то вроде piwriter. ДД может работать так же . не уверен. PiWriter вернул ошибку, так как ему не хватило места, но поскольку изображение не содержало реальных данных, превышающих размер карты меньшего размера, оно просто обрезало пустые сектора. Я не уверен, что это может означать . раздел может нуждаться в проверке или ремонте, но я могу убедиться, что он работает, когда я помещаю его в Pi.
это очень опасный совет, вы никогда не узнаете, были ли какие-либо данные сверх размера. Мы ищем более надежные и проверенные для работы решения. Я живу опасно, что я могу сказать;) На полном серьезе, хотя у меня нет большого опыта работы с картами dd или разделов, поэтому я нахожусь на неизведанной территории. Мне, вероятно, повезло, так как у меня было только около 800 МБ данных, идущих с карты 16 ГБ на карту 8 ГБ. Однако, из любопытства, есть ли какой-нибудь способ, возможно, сначала выполнить дефрагментацию данных, чтобы убедиться, что все они сгруппированы в начале раздела? Кажется, хак, но может быть? я не знаю насчет дефрагментации, но вы определенно можете изменить размеры своих разделов и переместить их в начало SD-карты, чтобы они занимали только начало. занимает немного больше времени, чем простой дд, но результаты гораздо надежнее.Я использую старую версию win32diskimager-RELEASE-0.1-r15-win32 для чтения изображения, оно создает изображение 4 ГБ даже с SD-карты 8 ГБ, а затем записывает изображение с последней версией win32diskimager.
Рабочая инструкция по переносу системы Raspbian с SD карточки на USB флешку. Загрузочный раздел обязательно остается на SD карте.
Имеется Raspberry Pi 3 B+, Raspbian Stretch на SD карте 8gb (класс 10) и USB флешка Apacer на 8gb
Все делал на рабочей системе с Domoticz на борту.
Проверяем файловую систему:
/dev/root это наша файловая система
/dev/mmcblk0p1 это загрузочный раздел на sd карте
Теперь вставим флешку в малину и проверим, распознается ли она:
Device 005 – это USB-флешка
Теперь проверим, распознается ли флешка операционной системой:
в данном случае USB-флешка обозначается как / dev / sda
Теперь займемся файловой системой. Установим:
Далее выполним разбиение:
«d» для удаления, «n» для создания нового раздела и «w», чтобы все это записать
Теперь редактируем файл /boot/cmdline.txt :
приводим значение root=/dev/mmcblk0p2 на root=/dev/sda1
Добавляем в конце задержку в 5 секунд:
В итоге наш файл /boot/cmdline.txt должен выглядеть следующим образом:
Теперь делаем форматирование, монтирование, установку rsync и копирование:
Процесс копирования занимает минут 10-15
Затем надо ввести изменения в таблицу файловой системы, т.е. в /etc/fstab (на флэшке, а не карте).
Добавляем следующую строчку:
И добавляем комментарий перед отсылкой к SD-карте:
Теперь это должно выглядеть как-то так:
Все готово. Для проверки того, откуда у меня сейчас запустится система, я создал на usb флешке файл /mnt/home/pi/hello.txt
и добавил текст hello
Теперь перезагружаем raspberry:
И смотрим, есть ли наш файл:
Система запустилась с usb накопителя. Что я сделал дальше, так это переустановил Domoticz:
И выбрал чистую установку (вся база и все устройства с настройками естественно сохраняются, но бэкап папки domoticz обязателен)
Опять перезапустил малину и все отлично работает. Теперь на usb флешке у нас система, а на sd карте остался загрузочный раздел.
Установка операционной системы на SD карту — не самая лучшая идея. Некоторые утилиты системы постоянно перезапускаются, информация постоянно перезаписывается. Хотя количество циклов записи ячеек SD карты очень большое, но оно все-таки ограничено. Если вы используете некачественную SD карту неизвестного производителя, то ресурс некоторых ячеек может быстро иссякнуть и система даст сбой. Современная технология "wear leveling" (выравнивание износа) позволяет более равномерно производить запись по всем адресам, но и это не снимает проблему. Исходя из этого всегда желательно иметь копию системы на другой SD карте.
Многие дистрибутивы Linux имеют утилиту по созданию образа дисков. Например, в Linux Mint можно создать образ SD карты и затем восстановить его на другую SD карту, получив тем самым резервную копию. Как это сделать, подробно описано в [2].
В последних версиях Raspbian разработчики добавили утилиту SD Card Copier. Она позволяет создать копию SD карты на самом Raspberry Pi. Утилита запускается из меню графической оболочки. Найти можно по пути Меню приложений -> Accessories -> SD Card Copier.
В командной строке введите rpi-clone и система выдаст справку с опциями запуска этой утилиты.
Новая SD карта обычно уже отформатирована в системе FAT32 и её сразу же можно использовать для клонирования. Если SD карта использовалась, то на ней есть разделы и может быть загрузочный раздел. Такую карту надо отформатировать. Я использовал программу SD Card Formatter 5.0.0 (установочный файл SD_CardFormatter0500SetupEN.exe). Подключите SD карту к компьютеру Windows и запустите утилиту. Выберите диск SD карты, установите флажок Quick format, если SD карта новая (почти). Если SD карта давала сбои, то выберите Overwrite format. Будет произведено сканирование всего пространства памяти. Затем нажмите кнопку Format.
Выдается предупреждение о том, что вся информация будет стерта. Нажмите Да и потом OK.
Есть и другой вариант. Если SD карта определилась в Windows, то можно отформатировать её средствами самой Windows. Откройте Этот компьютер (Мой компьютер). Щелкните правой кнопкой мыши (ПКМ) по диску SD карты.
Если вы используете для клонирования SD карту, на которой уже была установлена система Raspbian или WebHomePi, то достаточно отформатировать загрузочный раздел boot размером 44.8 MB. Раздел Linux можно не трогать.
В открывшемся меню выберите Форматировать. . Аналогично, если SD карта почти новая, то поставьте галку Быстрое. Если SD карта старая, то снимите эту галку. Будет произведена проверка всего пространства памяти SD карты.
Отформатированную SD карту вставьте в USB картридер и подключите к Raspberry Pi 3. Я использовал компактный USB картридер MXT-USB Storage Device фирмы DEXP.
Войдите как root и дайте команду
lsblk
В выводе команды должна присутствовать подключенная SD карта, обычно это устройство sda. Для простого клонирования никаких опций указывать не нужно, надо указать только устройство, т.е. sda. В командной строке введите
rpi-clone sda
Можно скопировать систему на карту меньшего объема. Спасибо Bill Wilson за такую возможность.
Например, у меня SD карта 8 GB: раздел boot использует 21.5 MB из 43.5 MB, раздел root использует 1.7 GB из 7.9 GB, поэтому решил клонировать на SD карту 4 GB.
В этом случае надо в параметрах запуска указать опцию -F (заглавная буква F, в Linux регистр имеет значение), т.е.
rpi-clone -F sda
После клонирования дайте команду halt и выключите Raspberry Pi 3. Выньте оригинальную SD карту и поставьте клон. Включите Raspberry Pi 3. Система должна загрузиться и работать так же, как на оригинальной карте. Всё — теперь у вас есть резервная копия на случай краха системы. Вместе с копией запишите и храните пароли пользователей root и pi, иначе потом не сможете подключиться по SSH.
Посмотреть свободное место на карте можно командой df -h.
sudo mkfs -t vfat -n FLASH /dev/sda1
sudo mkfs -t vfat -n FLASH /dev/sda2
Сколько SD-карт вы используете со своим Raspberry Pi? Один? Два? Возможно, у вас даже нет SD-карты, а вместо этого положитесь на microSD с адаптером, чтобы загрузить Pi в Raspbian или любую другую предпочитаемую вами ОС.
Использование нескольких SD-карт удобнее, чем использование одной, что позволяет легко переключаться между различными операционными системами для разных проектов. Например, у вас может быть SD-карта, предназначенная для управления медиацентром RaspBMC. и для вашей игровой системы RetroPie Третья SD-карта может быть просто основной Raspbian. , оптимизированный для работы с другими типами проектов или для изучения языка разработки Scratch.
Независимо от того, есть ли у вас одна SD-карта или несколько, в каждом сценарии вам понадобится одна вещь — возможность создавать резервные копии своих карт, чтобы избежать проблем, возникающих при сбое загрузки Raspberry Pi.
Клонировать вашу SD-карту? Вот что вам нужно!
Планируете клонировать свою SD-карту? Это имеет смысл, особенно если вы сталкивались с Raspberry Pi, который отказывается загружаться, потому что операционная система повреждена (что обычно происходит после того, как вы не можете правильно завершить работу) должным )
К счастью, клонирование является быстрым, простым и использует ту же утилиту, которую вы использовали для создания образа SD-карты в вашей ОС Raspberry Pi, Win32DiskImager.
Вам также понадобится много места на жестком диске. Когда вы создаете образ SD-карты, изображение включает в себя пустое пространство, а также часть файловой системы, в которой хранятся данные. Ранее мы уже говорили вам, как использование карты SD большего размера продлит срок ее службы продлить срок службы SD-карты продлить срок службы SD-карты , но клонирование означает, что вы будете создавать образ карты, который соответствует ее объему. Таким образом, для 8 ГБ карты вам понадобится 8 ГБ на жестком диске для сохранения образа.
Тем не менее, вы можете обойти это, архивируя файл для экономии места. Загрузка в облачное хранилище также снимает нагрузку с жесткого диска.
Создание образа диска вашей ОС Raspberry Pi
Как уже упоминалось, вы уже должны быть знакомы с утилитой Win32DiskImager. Чтобы скачать свежую копию, отправляйтесь в Sourceforge .
Чтобы создать образ вашего Raspberry Pi, вставьте носитель в устройство чтения карт и запустите Win32DiskImager. В поле « Файл изображения» введите путь к файлу и имя, в которое вы хотите сохранить изображение, и присвойте ему имя.
Выберите букву диска SD-карты в поле « Устройство» , и когда вы будете готовы, нажмите « Читать», чтобы начать процесс. После того, как образ создан, безопасно извлеките свою SD-карту и замените ее на Raspberry Pi.
Когда лучше всего клонировать SD-карту?
Как и в случае любого процесса создания образа операционной системы, лучшее время для клонирования вашей SD-карты — это когда она настроена именно так, как вам нужно. Только тогда она станет идеальной резервной копией, которую вы легко сможете использовать после аварии.
Например, вместо того, чтобы сразу устанавливать RaspBMC и создавать клон операционной системы медиацентра, было бы гораздо лучше установить RaspBMC, загрузить его, загрузить все обновления и получить правильную конфигурацию. Только когда это будет сделано, вы должны создать образ SD-карты.
Когда операционная система отказывается загружаться, вы можете заново создать образ карты с клонированной версией и начать работу за несколько минут.
Восстановление изображения Raspberry Pi на SD-карту
Если катастрофа поражает вашу операционную систему Raspberry Pi, восстановление файла образа происходит в случае вставки SD-карты в устройство чтения, а затем с помощью средства управления дисками Windows (вы можете выполнить поиск через экран «Пуск» в Windows 8 или во всех версиях. используйте более быструю WIN + R> diskmgmt.msc ), найдите и щелкните правой кнопкой мыши устройство, используя Delete, чтобы удалить все разделы на карте. Это предотвратит повреждение устройства.
После очистки карты снова загрузите Win32DiskImager и выберите файл изображения, выбрав его. Затем установите букву диска для устройства и нажмите « Запись», чтобы начать повторное создание образа.
После завершения ваш клонированный образ ОС Raspberry Pi будет записан на SD-карту и готов к использованию!
Raspberry Pi: Держи это сладким!
Несмотря на то, что Raspberry Pi — замечательный и универсальный аппаратный компонент, он иногда расстраивает, как правило, когда плохое завершение работы повредило файловую систему.
Использование этого метода клонирования ваших карт поможет свести эту проблему к минимуму, обеспечивая быстрое восстановление, а не бесконечные повторы медленного процесса установки.
Вы пытались клонировать SD-карту или планируете? Дайте нам знать, особенно если у вас есть какие-либо советы по хранению и индексированию ваших изображений Raspberry Pi.
Читайте также: