Forum
Ciel:
RPi4 s root filesystemom na ssd (boot bohuzial zostava na sdkarte, rpi4 zatial nepodporuje usb boot).
Dovod:
Pretoze sdkarty stoja za hovno. Su pomale, neznesu vela zapisov a v rpi tak nejak chcipaju. A hlavne - za cenu industrial SLC sd karty o kapacite 4-8 GB ma clovek 240 GB SSD co je tak 20x rychlejsie a netrpi tolko na zapisy.
Potrebujeme:
- RPi4
- sd kartu (4-8 GB staci)
- usb3 ssd (ja som kupil 240 GB za 1000 Kc)
Postup:
Pomocou balena etcher alebo podobneho toolu zapiseme raspbian buster na sdkartu. V pripade ze instalujeme bez monitora/klavesnice pripojenej k RPi, po dokonceni zapisu kartu znovu pripojime a na boot fat32 particii vytvorime prazdny subor s menom 'ssh'.
Nabootujeme RPi, prihlasime sa ako pi:raspberry. Kto ide na remote, zisti si z dhcp serveru adresu rpi a pouzije ssh. Kto ide napriamo a nefunguje mu hdmi, skusi hdmi_safe = 1 a hdmi_force_hotplug = 1 v /boot/config.txt (ide to editovat aj na windows, je to fat particia), pripadne sa pohra z rozliseniami. Osobne som chcel pouzit rpi4 ako nahradu mojho htpc, ale zda sa, ze s hdmi ma furu problemov, takze na to kaslem.
Switchneme sa na root-a a nainstalujeme par zakladnych toolov. Ja ako shell multiplexer rad pouzivam byobu (hint: F2 novy shell, alt+sipka vpravo/vlavo prepinanie medzi shellmi, CTRL+A D detach shellu)
sudo -i
apt-get install byobu tree
Odzalohujeme dolezite subory pre pripad ze sa nieco pokazi. V pripade problemu zalohy obnovime kludne aj v pc s windows (boot particia je fat32).
cd /boot
cp cmdline.txt cmdline.txt.orig
cp config.txt config.txt.orig
cd /
Pripojime ssd do usb3 portu a overime ci je jeho vyrobca (resp. vyrobca usb->sata redukcie) kokot lempl. Obvykle je.
(ssd sa objavi zvacsa ako /dev/sda, budem teda pracovat s tymto device)
dd if=/dev/sda of=/dev/null bs=1M count=100
Pokial to dobehne v rozumne kratkom case (~1 sekunda), tak zopakujeme s count=4096.
Pokial oba prikazy ukazali prenosovu rychlost pre SSD obvyklu (stovky MB/s), mame stastie na SSD. V opacnom pripade pozrieme cez dmesg ci v logu nie su podozrive hlasky, napr. [sda] tag#29 uas_eh_abort_handler 0 uas-tag 9 inflight: CMD OUT. Ak tam su, je potrebne ssd prepnut z uas modu do mass_storage. Pomocou lsusb najdeme ssd a zapiseme si jeho id-cka:
lsusb
Bus 002 Device 002: ID 125f:a88a A-DATA Technology Co., Ltd.
Odzalohujeme /boot/cmdline.txt
cp /boot/cmdline.txt /boot/cmdline.txt.orig
A pridame ssd quirks:
echo "usb-storage.quirks=125f:a88a:u $(cat /boot/cmdline.txt)" > /boot/cmdline.txt
reboot
Overime ssd:
dd if=/dev/sda of=/dev/null bs=1M count=100
dd if=/dev/sda of=/dev/null bs=1M count=4000
dmesg
Vytvorime na ssd novu partition table a filesystem(y). 240 GB je velkost mojho ssd.
parted /dev/sda
mklabel gpt
mkpart ext4 1M 240G
quit
Kto by chcel pouzit ext4 len pre rootfs a na zvysok pouzit btrfs, vytvori:
parted /dev/sda
mklabel gpt
mkpart ext4 1M 20G
mkpart btrfs 20G 240G
quit
Kto by chcel bootovat rovno z btrfs, da sa cerpat z https://hackmd.io . Dolezite je vytvorit initramdisk s modulom pre btrfs a nezabudnut ze prestane fungovat PARTUID a zacne fungovat UUID.
Vytvorime root filesystem na ssd a prenesieme tam root filesystem z sdkarty:
mkfs.ext4 -L ssd_root /dev/sda1
mkdir /mnt/ssd
mount /dev/sda1 /mnt/ssd
rsync -axHW / /mnt/ssd
Upravime fstab na ssd tak aby jeho root ukazoval na spravny disk:
tree /dev/disk
by-partuuid
│ ├── 07565edf-87bc-4f17-b64a-11ba06a84a11 -> ../../sda2
│ ├── 6c586e13-01 -> ../../mmcblk0p1
│ ├── 6c586e13-02 -> ../../mmcblk0p2
│ └── cf9604cf-30cc-4c38-be7f-34de07bd4747 -> ../../sda1
nano /mnt/ssd/etc/fstab
PARTUUID=cf9604cf-30cc-4c38-be7f-34de07bd4747 / ext4 defaults,noatime 0 1
A upravime cmdline aby kernel vedel kde ma root fs:
nano /boot/cmdline.txt
usb-storage.quirks=125f:a88a:u console=serial0,115200 console=tty1 root=PARTUUID=cf9604cf-30cc-4c38-be7f-34de07bd4747 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
A skusime ci to nabehne:
reboot
Pokial ano, overime pomocou mount ci / je /dev/sda1. Pokial ano, mame (skoro) hotovo. Pokial nie, prepiseme cmdline.txt a config.txt na karte zalohami a ideme odznova.
Osobne este upravujem mount /boot, aby sa mountoval readonly. Je to FAT32 a ta nema rada ked je natvrdo unmountnuta (resp. som sa stretol s tym ze niektore verzie ubootu z takto natvrdo unmountnutej particie nenabotovali a clovek mal na stole tehlicku). Mozno si s tym RPi firmware vie poradit, ale skusenosti z inych dosiek ma nutia byt opatrny.
nano /etc/fstab
PARTUUID=XXXYYYZZZ /boot vfat ro,defaults 0 2
reboot
Nezabudnut ze pokial bude treba robit nejake zasahy do /boot, treba ju predtym mountnut ako rw:
mount -o remount,rw /boot
A to je vsetko, mame rpi4 co bezi zo ssd (ale bohuzial zatial stale bootuje z sdkarty).
V dalsom pokracovani na rpi prehodim vsetok bordel co mam okolo loxone, takze primarne grafanu a zigbee.
nechces to hodit do wiki? pokud chces, tak to tak prekopiruju ja
Nechcem, varim obed 🙂 Ak mas cas daj to tam pls.
Pokial oba prikazy ukazali prenosovu rychlost pre SSD obvyklu (stovky MB/s), mame stastie na SSD. V opacnom pripade pozrieme cez dmesg ci v logu nie su podozrive hlasky, napr. [sda] tag#29 uas_eh_abort_handler 0 uas-tag 9 inflight: CMD OUT. Ak tam su, je potrebne ssd prepnut z uas modu do mass_storage.
Někdy stačí aktualizovat FW řadiče.
Mám tento řadič
https://www.aliexpress.com/item/4000333423401.html
Hlásí se mi jako JMicron:
Bus 002 Device 002: ID 152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp. JMS567 SATA 6Gb/s bridge
Sice se tváří jako JMS567, ale bude to JMS578 (viz ID 152d:0578).
Z Ali přišel s FW verze 4.0.7, v logu se mi objevovaly chyby, které popisoval Dušan (i když rychlost byla OK). Po aktualizaci na 4.1.4 vše bez problémů, UAS chyby se v logu už neobjevují. Nástroj pro aktualizaci FW najdete tady:
https://wiki.odroid.com/odroid-xu4/software/jms578_fw_update
Použijte standard firmware (bin-16028_jms578_std_v00.04.01.04_self_power_odd_20190611.zip)
Oprava:
Tak aktualizace FW nestačila. Po čas se chyby UAS začaly znovu objevovat. Pomohly až ty quirks a přepnutí do mass_storage.