ФОН
SD-карта была настроена для Raspberry pi. Цель состоит в том, чтобы точно скопировать SD-карту (ОС, приложения, данные), чтобы реплика функционировала в rPi точно так же, как оригинальная \ мастер-карта SD.
ОБНОВЛЕНИЕ: Предположим:
- Репликация будет выполняться на ноутбуке, настроенном на UNIX-подобную операционную систему.
- репликация не должна выполняться из rPi
- целевая SD-карта той же марки/модели
- Исходная SD-карта разделена на разделы с различными файловыми системами:
Вопросы
Какие варианты клонирования UNIX доступны для ноутбука HP с Ubuntu, слотом для SD-карт и USB-устройством чтения/записи SD-карт?
Имеет ли значение, является ли USB SD-карта RW устройством чтения или записи?
Цель (ограничение) — избежать покупки дополнительного оборудования.
Наблюдения за решением
date; sudo sh -c 'cat sdcard.image >/dev/mmcblk0'; date
Пн июн 3 17:53:18 EDT 2019 [sudo] пароль для пользователя: Пн июн 3 23:42:17 EDT 2019
date; sudo sh -c 'pv sdcard.image >/dev/mmcblk0'; date
Вт июн 4 00:33:50 EDT 2019 [sudo] пароль для пользователя: 119GiB 6:06:12 [5.56MiB/s] [==================================>] 100%
Вт июн 4 06:43:05 EDT 2019
Анализ gParted прошитой SD-карты показывает идентичное разбиение на разделы:
MacOS\OSX
Чтобы найти местоположение SD-карты:
diskutil list
Обязательно отмонтируйте SD-карту перед записью на нее:
sudo diskutil unmount /dev/disk#
где # — это 1,2,3...
решение1
Если вы просто хотите скопировать данные с SD-карты с одной карты на другую, то вы можете сделать это с помощьюддв командной строке.
Вам НЕ следует делать это с вашего Raspberry Pi из его собственной ОС. Это связано с тем, что ОС может записать данные на SD-карту во время копирования и повредить копию.
Чтобы скопировать SD-карту, подключите обе к двум считывателям (неважно, USB они или нет). Затем проверьте содержимое /dev
. Карты должны отображаться как /dev/sd*
. Например /dev/sdb
, . Будьте осторожны, так как ваш внутренний жесткий диск может быть уже включен. /dev/sda
.
Убедитесь, что ни одна из SD-карт не смонтирована, прочитайте вывод, введя в командной строке следующее:
mount | grep /dev/sd
Также проверьте вывод, чтобы знать, какая карта имеет какое имя файла (как root):
sudo blkid
Чтобы фактически скопировать (например, из /dev/sdb в /dev/sdc), введите (как root):
dd if=/dev/sdb of=/dev/sdc bs=4096 status=progress
решение2
Системы Unix делают устройства хранения доступными черезфайл устройства. Файлы устройств ведут себя как обычные файлы во многих отношениях. В частности, чтобы сделать точную копию устройства хранения, вы просто копируете содержимое исходного устройства на целевое устройство.
Сначала вам нужно определить исходный файл устройства и целевой файл устройства. Имя зависит от вашего варианта Unix и того, как он настроен, но на практике файлы устройств всегда находятся в каталоге /dev
. Если у вас смонтирована SD-карта, вы можете узнать, что такое файл устройства, с помощью
df /media/sdcard1/some/file/on/the/sdcard
Файл устройства находится в первом столбце. Другие инструменты могут предоставить ту же информацию, например, сообщения журнала ядра при вставке SD-карты или команда lsblk
в Linux.
На карте могут быть разделы. Если это так, скопируйте всю карту, даже если там один раздел, поскольку часть информации о загрузке может находиться за пределами раздела. Например, если df
отображается /dev/sdb1
в Linux, скопируйте /dev/sdb
и не только /dev/sdb1
.
Если вы вытащите SD-карту и вставите ее снова, на ней, как правило, будет то же имя файла устройства, что и раньше, но это не гарантируется.
Перед копированием убедитесь, что:
- Исходное устройство не смонтировано или смонтировано только для чтения.
- Целевое устройство вообще не смонтировано.
- Целевое устройство по крайней мере такого же размера, как и исходное. В Linux
lsblk
отображает размер устройства. - У вас правильное целевое устройство. Обратите внимание, что команда ниже перезапишет его содержимое без запроса подтверждения!
Предположим, что вы определили, что исходное устройство — это /dev/sdb
, а целевое устройство — это /dev/sdc
. Чтобы скопировать содержимое, выполните следующую команду как root:
cat /dev/sdb >/dev/sdc
Если вы используете sudo, перенаправление >
должно происходить от имени пользователя root, поэтому вам нужно написать что-то вроде
sudo sh -c 'cat /dev/sdb >/dev/sdc'
В качестве альтернативы, чтобы случайно не перезаписать не то устройство, можно выполнить два шага:
- Предоставьте пользователю (
gatorback
в моем примере) разрешение на чтение с исходного устройства (dev/sdb
в моем примере) и на запись на исходное устройство (/dev/sdc
в моем примере).sudo setfacl -m user:gatorback:r /dev/sdb sudo setfacl -m user:gatorback:w /dev/sdc
- Выполните копирование без sudo.
cat /dev/sdb >/dev/sdc
Вы можете скопировать образ диска в файл, а затем скопировать файл образа на целевое устройство. Это полезно, если вам нужно сделать несколько копий, или если у вас есть только один считыватель SD-карт, или чтобы снизить риск копирования в неправильном направлении.
sudo cat /dev/sdb >sdcard.image
- Выньте исходную карту и вставьте целевую карту.
- При желании проверьте содержимое,монтируем изображение, например
sudo mount -o loop -r sdcard.image /mnt
. sudo sh -c 'cat sdcard.image >/dev/sdb'
Если вы хотите удобно просматривать информацию о ходе выполнения, используйтеpv
вместо cat
( pv
редко устанавливается по умолчанию, но доступен в виде пакета в большинстве дистрибутивов).