Raspberry Pi:Настройка/Как перенести файловую систему на USB-флэшку
Содержание | Введение | Продукты | Операционная система | Настройка | Основы Linux | Аппаратные средства | Неисправности | Типовые проблемы | Часто возникающие вопросы | Библиотеки | Примеры |
//в процессе обработки
Как перенести файловую систему на USB-флэшку[1]
Я купил себе Raspberry Pi не просто поиграться, а для более-менее ответственной задачи, поэтому слегка забеспокоился, когда услышал о том, что SD-карты имеют свойство портиться. По всей видимости, они просто не созданы для ситуации, когда происходят постоянные считывание/запись, хотя отлично подходят, например, для обучения и хобби – благодаря своей дешевизне и простоте использования.
Если вы хотите перенести главную файловую систему на другой носитель, то в Google можно найти пару подходящих примеров. Правда, не все они подходят для Raspberry Pi, а некоторые будут понятны лишь самым продвинутым пользователям, которые знают, что делают.
Данную статью тоже можно счесть инструкцией для продвинутых, поэтому имейте это в виду. Кроме того, она будет состоять из двух частей:
- Упрощенная версия – для ситуации, когда вы используете только одну дополнительную USB-флэшку или USB-диск.
- Расширенная версия – для ситуации, когда к Pi нужно подключить более одного девайса. Имейте в виду, что она чуть сложнее.
Мы начнем, имея на руках совершенно новую SD-карту и совершенно новую USB-флэшку. Объем и скорость SD-карты не очень важны, и для нашей задачи подойдет любая карта объемом от 2 Гб (минимум два гигабайта нужны, поскольку мы собираемся загрузить на нее всю Debian).
В данном случае я воспользуюсь картой типа micro SDHC объемом 8 Гб (класс 10), т.к. использую подобные карты и для других задач, и мне не нравится, когда SD-карта подсоединяется снаружи корпуса Pi. Кроме того, в дело пойдет флэшка типа micro USB на 8 Гб.
Во-первых, вам нужно загрузить на SD-карту образ Wheezy Raspbian (я использую версию от 09.02.2013). Как это сделать – ищите в интернете, там достаточно материалов по этому вопросу. На своем ноутбуке W7 я использую win32diskmanager. Затем просто ставим его на Pi и загружаем.
Можно воспользоваться LAN-кабелем, но если вы запускаете Pi через WiFi (как это делаю я), то это нужно настроить в самую первую очередь. Опять же, в интернете достаточно инструкций на эту тему и, скорее всего, для вашей флэшки тоже. Что касается моего случая, то я использую EDIMAX. Кроме того, я, разумеется, использую ssh, но это не так важно.
Для начала нужно запустить raspi-config:
sudo raspi-config
Теперь делаем другие настройки:
configure_keyboard (для «голой» Pi это не нужно)
change_pass (для смены пароля Raspberry; впрочем, этим можно заняться и позже)
change_locale
change_timezone
memory_split («голую» Pi можно настроить на 16 Мб)
Теперь эти новые параметры нужно активировать. Для этого перезагружаем Pi. Далее проверяем файловую систему:
pi@raspberrypi ~ $ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 1.8G 1.4G 247M 86% /
/dev/root 1.8G 1.4G 247M 86% /
devtmpfs 235M 0 235M 0% /dev
tmpfs 49M 248K 49M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 98M 0 98M 0% /run/shm
/dev/mmcblk0p1 56M 19M 38M 34% /boot
pi@raspberrypi ~ $
Хотя я использую карту на 8 Гб, размер по умолчанию – это 1,8 Гб, поскольку мы не используем
expand_rootfs
. Запись
/dev/mmcblk0p1
– это загрузочный раздел (p1) на девайсе
mmcblk0
, т.е. на SD-карте.
Когда мы закончим, загрузочный раздел будет единственным разделом SD-карты, и причина тому – особый способ, которым Pi осуществляет загрузочный процесс. Он начинается с того, что эти данные сначала загружает графический чип, после чего система размыкает на CPU контакт RESET, и в дело вступает уже сам CPU.
Теперь, если вы этого еще не сделали, вставьте USB-флэшку. Далее проверьте, распознается ли она:
pi@raspberrypi ~ $ lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 001 Device 006: ID 8644:800b
pi@raspberrypi ~ $
Device 006 – это USB-адаптер. Этот ID является уникальным идентификатором производителя.
Теперь проверяем, распознается ли девайс операционной системой (это также можно выполнить командой dmesg):
pi@raspberrypi ~ $ tail /var/log/messages
May 18 11:44:31 raspberrypi kernel: [ 64.093866] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May 18 11:44:31 raspberrypi kernel: [ 64.093883] usb 1-1.3: Product: Intenso Micro Line
May 18 11:44:31 raspberrypi kernel: [ 64.093898] usb 1-1.3: Manufacturer: Intenso
May 18 11:44:31 raspberrypi kernel: [ 64.093912] usb 1-1.3: SerialNumber: 12390000000004E2
May 18 11:44:31 raspberrypi kernel: [ 64.112228] scsi1 : usb-storage 1-1.3:1.0
May 18 11:44:32 raspberrypi kernel: [ 65.113335] scsi 1:0:0:0: Direct-Access Intenso Micro Line 1.01 PQ: 0 ANSI: 2
May 18 11:44:32 raspberrypi kernel: [ 65.114862] sd 1:0:0:0: [sda] 15669248 512-byte logical blocks: (8.02 GB/7.47 GiB)
May 18 11:44:32 raspberrypi kernel: [ 65.115607] sd 1:0:0:0: [sda] Write Protect is off
May 18 11:44:32 raspberrypi kernel: [ 65.126062] sda: sda1
May 18 11:44:32 raspberrypi kernel: [ 65.129907] sd 1:0:0:0: [sda] Attached SCSI removable disk
pi@raspberrypi ~ $
Да, в данном случае USB-флэшка обозначается как
/dev/sda
. Другими словами, данная (упрощенная) версия инструкции не позволяет узнать, какое название ОС присвоит дополнительному USB-накопителю. Но не беда – это позволяет сделать расширенная версия (см. ниже).
Итак, если вы собрались использовать версию попроще (с одной USB-флэшкой), то она начинается отсюда:
Упрощенная версия
Создаем на USB-флэшке файловую систему. Чтобы отобразить список разделов, используем команду p:
pi@raspberrypi ~ $ sudo fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 8022 MB, 8022654976 bytes
94 heads, 14 sectors/track, 11906 cylinders, total 15669248 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sda1 32 15669247 7834608 b W95 FAT32
Command (m for help):
Итак, на флэшке имеется один раздел, отформатированный под Windows. Нам надо переформатировать его под Linux.
Введите «d», чтобы удалить раздел(ы).
Примечание. Если вы, устанавливая файловую систему Debian, собираетесь использовать одну лишь USB-флэшку, то вперед. Однако если в дело пойдет какой-нибудь более объемный USB-накопитель, то у вас появится возможность сделать один раздел под Debian плюс еще несколько разделов под другие системы. Здесь я это описывать не буду, но уверен, что вы сможете сделать это сами. Мы же ограничимся лишь одним разделом. Введите «n», чтобы создать новый основной раздел (т.е. раздел номер 1), который будет занимать весь объем носителя – для этого нужно несколько раз нажать Enter.
Command (m for help): d
Selected partition 1
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-15669247, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-15669247, default 15669247):
Using default value 15669247
Command (m for help):
Теперь вводим «w», чтобы записать на флэшку новую информацию.
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
pi@raspberrypi ~ $
Готово. Теперь этот раздел можно форматировать:
pi@raspberrypi ~ $ sudo mke2fs -t ext4 -L rootfs /dev/sda1
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=rootfs
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
490560 inodes, 1958652 blocks
97932 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2009071616
60 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
pi@raspberrypi ~ $
И перед использованием этот раздел нужно примонтировать:
pi@raspberrypi ~ $ sudo mount /dev/sda1 /mnt
pi@raspberrypi ~ $
Итак, взглянем, что мы успели сделать к данному моменту:
pi@raspberrypi ~ $ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 1.8G 1.4G 247M 86% /
/dev/root 1.8G 1.4G 247M 86% /
devtmpfs 235M 0 235M 0% /dev
tmpfs 49M 248K 49M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 98M 0 98M 0% /run/shm
/dev/mmcblk0p1 56M 19M 38M 34% /boot
/dev/sda1 7.4G 145M 6.9G 3% /mnt
pi@raspberrypi ~ $
Мы сделали флэшку /dev/sda1 доступной как /mnt для Linux, так что теперь мы можем ее использовать.
Мы можем просто скопировать данные в раздел /dev/root на новом накопителе. Для этого можно воспользоваться dd, но это программа для побитового копирования – она будет копировать с SD-карты даже пустые места, поэтому процесс будет очень-очень медленным. Лучше воспользоваться rsync – устанавливаем его...
pi@raspberrypi ~ $ sudo apt-get install rsync
...
pi@raspberrypi ~ $
...а потом запускаем. Он будет работать гораздо быстрее, но создание зеркального образа файловой системы на USB-флэшке все же займет какое-то время. Мы будем копировать все из «/» в только что примонтированный диск /mnt (который /dev/sda1).
pi@raspberrypi ~ $ sudo rsync -axv / /mnt
...
На моей системе это занимает около 15 минут. Ни в коем случае не прерывайте этот процесс! Если хотите, всегда можно открыть другую ssh-сессию, и ждать завершения rsync-процесса будет необязательно. Далее нам надо объяснить Pi, где найти новые данные для загрузки Debian. Для этого меняем файл /boot/cmdline.txt. Но перед этим создаем бэкап-копию этого файла, чтобы потом в любой момент можно было вернуться к изначальным настройкам. И будьте осторожны – потеряете этот файл, и Pi просто не сможет загрузиться. То есть образ нужно будет загружать заново.
sudo cp /boot/cmdline.txt /boot/cmdline.orig
Этот файл содержит одну очень длинную командную строку, и наша задача – поменять ссылку, которая вела на SD-карту (root=/dev/mmcblk0p2), на ссылку, которая будет вести на новую USB-флэшку (root=/dev/sda1). Вот копия оригинального файла:
pi@raspberrypi ~ $ cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
pi@raspberrypi ~ $
В целях безопасности нужно добавить еще одну команду. При выполнении процесса power-up/boot подготовка USB-флэшки может занять больше времени, чем ожидает ОС. Но если мы добавим 5-секундную задержку (rootdelay=5), USB-флэшка будет готова когда нужно. Когда моей удаленной системе нужно будет перезагрузиться, я хочу быть уверен, что все пройдет нормально, и эти лишние секунды – больше не проблема. Изменения можно внести при помощи любого редактора.
sudo nano /boot/cmdline.txt
Все это должно выглядеть следующим образом:
pi@raspberrypi ~ $ cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait rootdelay=5
pi@raspberrypi ~ $
В зависимости от энергопотребления USB-флэшки или USB-диска, вам может понадобиться отредактировать /boot/config.txt, добавив туда следующую строчку:
max_usb_current=1
Затем надо ввести пару вещей в таблицу файловой системы, т.е. в /etc/fstab (на флэшке, а не карте).
sudo nano /mnt/etc/fstab
Добавляем следующую строчку:
/dev/sda1 / ext4 defaults,noatime 0 1
И добавляем комментарий перед отсылкой к SD-карте:
#/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
Теперь это должно выглядеть как-то так:
proc /proc proc defaults 0 0
/dev/sda1 / ext4 defaults,noatime 0 1
/dev/mmcblk0p1 /boot vfat defaults 0 2
#/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that
Теперь систему можно перезагрузить.
sudo reboot
Имейте в виду, что ACT-светодиод теперь работать не будет, т.к. он показывает только активность записи/считывания на SD-карте. После того, как Pi загрузится, проверяем файловую систему.
pi@raspberrypi ~ $ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 7.4G 1.6G 5.5G 22% /
/dev/root 7.4G 1.6G 5.5G 22% /
devtmpfs 235M 0 235M 0% /dev
tmpfs 49M 248K 49M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 98M 0 98M 0% /run/shm
/dev/mmcblk0p1 56M 19M 38M 34% /boot
pi@raspberrypi ~ $
Итак, USB-флэшка стала rootfs – обратите внимание на ее размер в 7,5 Гб.
Изменение области подкачки
На Pi не нужно возиться с разделами подкачки, т.к. в Raspbian эта функция реализована не так, как у других систем Linux. Эта ОС использует dphys-swapfile – решение, которое основывается на файлах подкачки, а не на «стандартных» разделах подкачки. Благодаря этому менять размер области подкачки стало проще – для этого нужно проделать следующее. Сначала вводим команду «top», чтобы посмотреть на данные подкачки:
pi@raspberrypi ~ $ top
top - 13:28:20 up 3 min, 1 user, load average: 0.18, 0.37, 0.18
Tasks: 66 total, 1 running, 65 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 0.0 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem: 497544 total, 55700 used, 441844 free, 5432 buffers
KiB Swap: 102396 total, 0 used, 102396 free, 27592 cached
102396 – это 100 Мб области подкачки.
Конфигурационный файл для области подкачки – это /etc/dphys-swapfile.
Его содержимое выглядит довольно просто. По умолчанию Raspbian имеет 100 Мб области подкачки:
pi@raspberrypi ~ $ cat /etc/dphys-swapfile
CONF_SWAPSIZE=100
pi@raspberrypi ~ $
Хотите поменять? Впишите другую цифру, а затем перезапустите dphys-swapfile.
pi@raspberrypi ~ $ sudo nano /etc/dphys-swapfile
pi@raspberrypi ~ $
Я поменял эту цифру со 100 на 512, т.е. до полного объема RAM-памяти. Изменив этот параметр, запускаем следующее:
pi@raspberrypi ~ $ sudo dphys-swapfile setup
want /var/swap=512MByte, checking existing: deleting wrong size file (104857600), generating swapfile ... of 512MBytes
pi@raspberrypi ~ $
Чтобы подгрузить этот новый размер, нам нужно остановить процесс файла подкачки...
pi@raspberrypi ~ $ sudo /etc/init.d/dphys-swapfile stop
Stopping dphys-swapfile swapfile setup ..., done.
pi@raspberrypi ~ $
...а затем перезапустить его:
pi@raspberrypi ~ $ sudo /etc/init.d/dphys-swapfile start
Starting dphys-swapfile swapfile setup ...
want /var/swap=512MByte, checking existing: keeping it
done.
pi@raspberrypi ~ $
Теперь проверяем его снова при помощи команды «top»:
top - 13:37:22 up 12 min, 1 user, load average: 0.01, 0.08, 0.12
Tasks: 64 total, 1 running, 63 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 497544 total, 57016 used, 440528 free, 5556 buffers
KiB Swap: 524284 total, 0 used, 524284 free, 28604 cached
Готово! Теперь все будет запускаться на USB-флэшке. Далее займемся апдейтом и апгрейдом Debian:
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get autoremove
Вот теперь можно спокойно работать.
Возврат обратно к SD-карте
Если при загрузке с USB-флэшки начали возникать проблемы, можно попробовать вернуться к исходному /boot/cmdline.txt, воткнув SD-карту в ПК, а затем при помощи файлового менеджера скопировать файл /boot/cmdline.txt куда-нибудь еще (boot/cmdline.usb) и скопировать название /boot/cmdline.orig в /boot/cmdline.txt (осторожно, не пользуйтесь переименованием – Windows может переименовать файл cmdline.txt в cmdline.txt.txt). Если ваша система по-прежнему работает с USB-флэшкой, вы можете примонтировать на SD-карту Windows-раздел и изменить cmdline-файлы при помощи Debian. Но перед тем, как делать это, имейте в виду, что мы уже модифицировали файл /etc/fstab на SD-карте, а затем перенесли его на USB-флэшку. То есть сначала нам нужно вернуть этот файл в изначальный вид, затем загрузить его на SD-карту, а потом уже возвращать на SD-карту файловую систему. Для этого нужно проделать следующее:
pi@raspberrypi ~ $ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 7.4G 2.5G 4.6G 36% /
/dev/root 7.4G 2.5G 4.6G 36% /
devtmpfs 235M 0 235M 0% /dev
tmpfs 49M 240K 49M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 98M 0 98M 0% /run/shm
/dev/mmcblk0p1 56M 19M 38M 33% /boot
Вводим команду «p», чтобы отобразить список разделов:
pi@raspberrypi ~ $ sudo fdisk /dev/mmcblk0
Command (m for help): p
Disk /dev/mmcblk0: 4035 MB, 4035969024 bytes
4 heads, 16 sectors/track, 123168 cylinders, total 7882752 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00014d34
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/mmcblk0p2 122880 7882751 3879936 83 Linux
Command (m for help): q
Теперь мы знаем, что разделом для файловой системы Linux является p2. Монтируем его...
pi@raspberrypi ~ $ sudo mount /dev/mmcblk0p2 /mnt
...и проверяем:
pi@raspberrypi ~ $ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 7.4G 2.5G 4.6G 36% /
/dev/root 7.4G 2.5G 4.6G 36% /
devtmpfs 235M 0 235M 0% /dev
tmpfs 49M 240K 49M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 98M 0 98M 0% /run/shm
/dev/mmcblk0p1 56M 19M 38M 33% /boot
/dev/mmcblk0p2 3.7G 1.7G 1.9G 47% /mnt
Окей, теперь мы можем отредактировать файл fstab на SD-карте, чтобы он вернулся в изначальное состояние.
pi@raspberrypi ~ $ sudo nano /mnt/etc/fstab
И снова проверка:
pi@raspberrypi ~ $ sudo cat /mnt/etc/fstab
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that
#filesystem on USB stick
pi@raspberrypi ~ $
Таким образом, просто скопировав правильную версию /boot/cmdline на Windows-раздел SD-карты, мы можем изменить загрузочные настройки, сделав так, чтобы загрузка осуществлялась с SD-карты. Если с первого раза не получилось, то я надеюсь, что рассказал достаточно для того, чтобы вы поняли, что нужно поправить, чтобы все было нормально.
Расширенная версия
Поскольку Debian должна загрузиться с правильного USB-девайса, разделу и файловой системе нужно присвоить уникальные идентификаторы, не ограничиваясь именами, которые система дает USB-девайсам (вроде /dev/sda). Так как в упрощенной версии изложено, на мой взгляд, уже достаточно, далее мы не будем слишком ударяться в детали. Вместо стандартной команды fdisk воспользуемся ее более современной версией gdisk. Это можно проделать так:
sudo apt-get install gdisk
Далее выполняем разбиение:
sudo gdisk /dev/sda
Теперь проделываем то же самое, что и с fdisk. Сначала «d» для удаления, потом «n» для создания нового раздела и, наконец, «w», чтобы все это записать. Опять же, чтобы выставить настройки по умолчанию, нажимаем Enter. Если нужно больше разделов, то сейчас самое время. Если воспользоваться командой «i» (информация), то появится следующее:
pi@raspberrypi ~ $ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.5
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): i
Using 1
Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
Partition unique GUID: 2C7FD5E5-5CC4-434C-BFF6-F45336F7140B
First sector: 2048 (at 1024.0 KiB
Last sector: 15669214 (at 7.5 GiB
Partition size: 15667167 sectors (7.5 GiB
Attribute flags: 0000000000000000
Partition name: 'Linux filesystem'
Command (? for help):
Нам нужно следующее – уникальный GUID раздела, т.е. 2C7FD5E5-5CC4-434C-BFF6-F45336F7140B. Эта информация (PARTUUID) пойдет в /boot/cmdline.txt и будет выглядеть следующим образом:
pi@raspberrypi ~ $ cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=PARTUUID=2C7FD5E5-5CC4-434C-BFF6-F45336F7140B rootfstype=ext4 elevator=deadline rootwait rootdelay=5
pi@raspberrypi ~ $
И не забудьте добавить задержку (rootdelay)!
В зависимости от энергопотребления флэшки/накопителя вам также может понадобиться отредактировать /boot/config.txt, добавив туда следующее:
max_usb_current=1
Теперь делаем форматирование, монтирование, установку rsync и копирование:
sudo mke2fs -t ext4 -L rootfs /dev/sda1
sudo mount /dev/sda1 /mnt
sudo apt-get install rsync
sudo rsync -axv / /mnt
Теперь нам нужно получить уникальный идентификатор для дисковой информации из fstab:
pi@raspberrypi ~ $ sudo tune2fs -l /dev/sda1
tune2fs 1.42.5 (29-Jul-2012)
Filesystem volume name: rootfs
Last mounted on: /
Filesystem UUID: 3d2cb3c9-7e2b-4255-ac63-863bd3ad7993
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
...
pi@raspberrypi ~ $
Тут нам нужно следующее – UUID файловой системы, т.е. 3d2cb3c9-7e2b-4255-ac63-863bd3ad7993. Далее нам надо ввести эту информацию в таблицу файловой системы, т.е. в /etc/fstab (на флэшке, а не на карте). Для того добавляем следующую строчку...
/dev/disk/by-uuid/3d2cb3c9-7e2b-4255-ac63-863bd3ad7993 / ext4 defaults,noatime 0 1
...а затем вставляем комментарий перед отсылкой на SD-карту:
#/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
Вот и все. Если все проверили (не путайте GUID раздела с UUID файловой системы!), можно перезагружаться и пробовать систему на работоспособность. Удачи!