RPi2 root mozgatása usb-re

írta: sonar, 1 éve

Elő kellett vennem a jó öreg RPi2-t. Sajnos a 2 Gigás SD kártya hamar szűknek bizonyult.
Amúgy is kellett egy pendrive a projecthez (32G-s USB3-as Kingstone) ezért kézenfekvőnek bizonyult, hogy az SD kártya csak a boot-olást végzi majd minden másra ott a pendrive. Mivel ez egy elég régi kiadás ezért grafikus felület egyáltalán nincsen rajta. Minden műveletet parancssorban csináltam. (Talán a particionálás lett volna csak gyorsabb gparted segítségével)

Ha még nincsen feltelepítve a gdisk akkor tegyük meg:
sudo apt-get update && sudo apt-get install gdisk

Én sok sudo helyett átváltottam root userre
pi@rpi:~# sudo su -
root@rpi:~#

lsblk-val láthatjuk, hogy a 28.8G-s pendriveunk az az sda eszköz és egy darab partició van rajta az pedig az sda1.
root@rpi:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 28,8G 0 disk
└─sda1 8:1 1 28,8G 0 part

mmcblk0 179:0 0 1,9G 0 disk
├─mmcblk0p1 179:1 0 256M 0 part /boot
└─mmcblk0p2 179:2 0 1,6G 0 part /

Most akkor töröljük a pendrive-ról a particiót és hozzunk létre kettő darab új particiót.
Elsőnek egy 8 Gigásat ahová a root fájl rendszert mozgatjuk át, és majd egy 16G-t az adatoknak.

root@rpi:~# gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): d
Using 1

8G-s partició létrehozása a /-nak
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-60437458, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-60437458, default = 60437458) or {+-}size{KMGTP}: +8G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

16G data partició
Command (? for help): n
Partition number (2-128, default 2): 2
First sector (34-60437458, default = 16779264) or {+-}size{KMGTP}:
Last sector (16779264-60437458, default = 60437458) or {+-}size{KMGTP}: +16G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Ellenőrizzük le, hogy amit elterveztünk az rendben van-e (Ha no problems found-dal kezdődik akkor megnyugodhatunk)
Command (? for help): v

No problems found. 10105777 free sectors (4.8 GiB) available in 2
segments, the largest of which is 10103763 (4.8 GiB) in size.

Véglegesítsük a változásokat
Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.

Formázzuk meg a két particiót.

root@rpi:~# mke2fs -t ext4 -L rootfs /dev/sda1

mke2fs 1.44.5 (15-Dec-2018)
/dev/sda1 contains a ntfs file system labelled 'USB32G'
Proceed anyway? (y,N) y
Creating filesystem with 2097152 4k blocks and 524288 inodes
Filesystem UUID: 9cf1637e-2221-4249-8e4d-8d0966ba40a3
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

Második partició formázása
root@rpi:~# mke2fs -t ext4 -L data /dev/sda2

Csatoljuk fel a 8G-s particiónkat (jelen esetben a /mnt -be) és nézzük meg, hogy hogyan is állunk.
root@rpi:~# mount /dev/sda1 /mnt
root@rpi:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 28,8G 0 disk
├─sda1 8:1 1 8G 0 part /mnt
└─sda2 8:2 1 16G 0 part
mmcblk0 179:0 0 1,9G 0 disk
├─mmcblk0p1 179:1 0 256M 0 part /boot
└─mmcblk0p2 179:2 0 1,6G 0 part /

Szinkronizáljuk át az SD kártyán lévő tartalmat a pendrive-on elkészített 8G-s particióra, amit az előbb a /mnt-be felcsatoltunk. (ez egy jó 5-10 perces folyamat volt nálam, pedig még csak az OS van feltelepítve)
root@rpi:~# rsync -axv / /mnt

Készítsünk mentést a /boot/cmdline.txt -ről
cp /boot/cmdline.txt /boot/cmdline.sd

Kérjük ki a particiókhoz tartozó UUID-kat
root@rpi:~# blkid
/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="4BBD-D3E7" TYPE="vfat" PARTUUID="738a4d67-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="45e99191-771b-4e12-a526-0779148892cb" TYPE="ext4" PARTUUID="738a4d67-02"
/dev/sda1: LABEL="rootfs" UUID="9cf1637e-2221-4249-8e4d-8d0966ba40a3" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="3bd49b37-eb01-426e-9287-2f5c913e4cfe"
/dev/sda2: LABEL="data" UUID="72639994-a87f-4d4a-bafa-92dd1bfd0702" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="6ff7e345-e2b0-4a79-aa55-157b3f06ec84"
/dev/mmcblk0: PTUUID="738a4d67" PTTYPE="dos"

Majd a /boot/cmdline.txt -ben cseréljük le PARTUUID= utáni részt a rootfs-hez tartozóra
Eredeti: PARTUUID=738a4d67-02
USB: PARTUUID=3bd49b37-eb01-426e-9287-2f5c913e4cfe
nano /boot/cmdline.txt
console=serial0,115200 console=tty1 root=PARTUUID=3bd49b37-eb01-426e-9287-2f5c913e4cfe rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

Ezután már csak az fstab-ban kell átírnunk a PARTUUID-t. Illetve a pendrive második particióját is a /data-ba felcsatoltatom automatikusan
root@rpi:~# nano /mnt/etc/fstab
proc /proc proc defaults 0 0
PARTUUID=738a4d67-01 /boot vfat defaults 0 2
#PARTUUID=738a4d67-02 / ext4 defaults,noatime 0 1
PARTUUID=3bd49b37-eb01-426e-9287-2f5c913e4cfe / ext4 defaults,noatime 0 1
PARTUUID=6ff7e345-e2b0-4a79-aa55-157b3f06ec84 /data ext4 defaults,noatime,nodev,nosuid 0 1

Kikommentelve bent hagytam a régi bejegyzést.

Ezután már csak egy reboot és ha mindent jót csináltunk akkor az SD kártyát csak a boot-olás erejéig használja a rendszer.
root@rpi:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 28,8G 0 disk
├─sda1 8:1 1 8G 0 part /
└─sda2 8:2 1 16G 0 part /data
mmcblk0 179:0 0 1,9G 0 disk
├─mmcblk0p1 179:1 0 256M 0 part /boot
└─mmcblk0p2 179:2 0 1,6G 0 part
root@rpi:~# df -h
Fájlrendszer Méret Fogl. Szab. Fo.% Csatol. pont
/dev/root 7,9G 1,3G 6,2G 18% /
devtmpfs 212M 0 212M 0% /dev
tmpfs 217M 0 217M 0% /dev/shm
tmpfs 217M 3,1M 214M 2% /run
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 217M 0 217M 0% /sys/fs/cgroup
/dev/mmcblk0p1 253M 53M 200M 21% /boot
/dev/sda2 16G 45M 15G 1% /data
tmpfs 44M 0 44M 0% /run/user/1000