Moure partició arrel de SD a USB en la Raspberry

Després d’un temps utilitzant una raspberry amb el S.O. a la targeta SD ens podem trobar que aquest falla. Pel que he llegit ‘per ahí’ sol passar prou a sovint ja que en realitat la targeta SD no està preparada para tanta lectura/escriptura (això pareix). Però hi ha una solució per a aquest problema: Passar la partició arrel del S.O. a una unitat USB, és un canvi ben senzill però que depenent del tamany de la partició necessitarà més temps o menys (i estic parlant fins a varies hores).

El primer que es fa és identificar on està la nostra partició arrel, per a això es fa un df -h i localitzem la línia on indica que la partició és ‘/’:

Filesystem Size Used Avail Use% Mounted on
 rootfs 15G 1.9G 13G 14% /
 /dev/mmcblk0p2 15G 1.9G 13G 14% /
 devtmpfs 243M 0 243M 0% /dev
 tmpfs 49M 224K 49M 1% /run
 tmpfs 5.0M 0 5.0M 0% /run/lock
 tmpfs 98M 0 98M 0% /run/shm
 /dev/mmcblk0p1 56M 17M 40M 30% /boot

En aquest cas seria /dev/mmcblk0p2

Després identifiquem la nostra unitat USB, podem fer un ls /dev/sd* abans de connectar el nostre USB, connectar el nostre USB i tornar a fer un ls /dev/sd*, veurem que hi ha algun element nou. Imaginem que al nostre cas hem identificat el /dev/sda1 (sda és la unitat i el 1 és la partició, pot ser sda, sdb, sdc,…. i la partició 1, 2, 3,…).
Aleshores executem:

 sudo dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=4M

Aquest comandament el que fa és fer una ‘foto’ de la partició arrel i plasmar-la a la partició que li hem indicat (borrant tot el que hi havia abans, per supost). Després es necessita revisar la nova partició en busca d’errors. Si no es fa no es podrà seguir al següent pas.

 sudo e2fsck /dev/sda1

Ara tenim una copia exacta de la partició de la SD en la unitat USB, però segurament la unitat USB té més espai i el estem desaprofitant. Per a ocupar tot l’espai possible executem:

 sudo resize2fs /dev/sda1

I ací podriem dir que acaba la primera part: la migració de dades. Ara comença la segona part: la configuració del S.O. per a iniciar amb la nova partició com a partició arrel.
Primer muntem la nova partició

 sudo mount /dev/sda1 /mnt

I editem el seu fitxer fstab

 sudo nano /mnt/etc/fstab

El que anem a fer és canviar el /dev/mmcblk0p2 que haviem vist al primer pas per el /dev/sda1 que és la nova partició (en aquest cas té aquest nom, recordeu al vostre cas pot tenir un altre nom)

Exemple:
Abans

 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...

Després

 proc /proc proc defaults 0 0
 /dev/mmcblk0p1 /boot vfat defaults 0 2
 /dev/sda1 / ext4 defaults,noatime 0 1
 # a swapfile is not a swap partition, so no using swapon|off...

Ara ja podem desmuntar la partició nova

 sudo umount /dev/sda1

I anem a editar un fitxer de configuració del boot

 sudo nano /boot/cmdline.txt

On modifiquem el root=/dev/mmcblk0p2 per root=/dev/sda1

Ara ja si que podem reiniciar i comprovar que estem a la nova partició. Ho podem comprovar amb un df -h per a veure les particions muntades i el tamany.

La partició vella la podem deixar ahí sense tocar, no se sap mai si algun dia es necessitarà per a alguna emergència com voler utilitzar la raspberry sense la unitat USB. Per a aquest cas sols fariem l’últim pass, tornant a posar el root=/dev/mmcblk0p2.

Aquesta informació l’he extret i mig traduït de:
http://travisred.github.io/using-a-usb-drive-as-os-root-on-a-raspberry-pi/

Augmentar la potència dels USB’s de la Raspberry B+

Una vegada ja instal·lat tot a la raspberry tire a connectar el meu disc USB i no té prou alimentació per a funcionar. Pel que he llegit els ports sols donen una potència de 600mA per port, és a dir que amb un cable amb doble connexió (com els que hi havia abans) si que em funcionaria. Però no és el cas perquè no tinc cable així. Aixina que he continuat navegant i he trobat diverses webs on expliquen com poder augmentar l’amperatge fins a 1200mA.

Aquesta configuració pot ser perillosa per a la placa ja que li donem massa canya i pot ser no acabe be la cosa, així que ho feu baix la vostra responsabilitat encara que si sols li connectes un disc dur i res més pels ports USB no tindràs cap problema. Ja vos diré més endavant jeje.

També dir que per a que funcione be la configuració l’alimentador que tinga deu ser d’una potència d’uns 2A (2000mA).

Per a habilitar aquesta funcionalitat cal editar el fitxer /boot/config.txt com a root i afegir la línia
safe_mode_gpio=4
Aquesta vegada no vos puc explicar qué vol dir, sols se que funciona. A la web on ho he vist també comenta que estaria be també afegir la línia
max_usb_current=1
No ens explica per a que és però supose que serà per a llimitar el número de dispositius alimentats per USB

Finalment cal reiniciar el dispositiu per a que faça efecte la nova configuració

http://www.element14.com/community/community/raspberry-pi/raspberry-pi-bplus/blog/2014/07/19/home-network-with-just-the-raspberry-pi-b-and-a-usb-external-hdd

 

Edite(2015/09/14):

Val la pena comprar un HUB alimentat externament per a alimentar els periferics que no aguante la raspberry. Després d’uns mesos sense para “l’aparatet” comença a funcionar mal (en el meu cas, clar). El que m’ha passat és que s’ha fotut el xip que controla els USB’s i que també controla la interfície de xarxa, fallant aleatòriament. Per tant ja no la puc utilitzar per al que jo vull i me’n he tingut que comprar una altra i configurar des de 0.

Instal·lació bàsica del Raspbian a Raspberry Pi B+ (i A+)

Al final m’he fet amb una Raspberry Pi B+, ja que per al tema de les còpies de seguretat de RSYNC que he anat comentant necessitava un pc amb USB i el servidor que tinc no em fa eixa funció. I com en la feina m’ho comentaven el tema de la Raspberry, he pensat que estaria be fer-se amb un aparell d’aquestos a veure que fa.

L’he comprat de PC Componentes i te l’envien amb una caixeta. Realment és menut, més o menys com un disc de 2’5″ i no porta cap accesori (ni carregador, ni res de res). Així que he tirat ma de telèfons retirats per a aconseguir alimentador (utilitza el mateix tipus d’USB que els telèfons d’ara, si si ixe que és xafadet!) i també per a aconseguir una microSD per a instal·lar el sistema, encara que si després vas a connectar-li un disc dur per USB i deixar-ho sempre així no és necessari perquè pots particionar el disc dur i aprofitar un trocet per al sistema.

He estat mirant per la web de la Raspberry quins sistemes se li pot instal·lar, i com jo estic acostumat al Debian i totes les seves versions he vist que la que millor m’anava a mi es la de Raspbian.

Revisant els mètodes d’instal·lació he vist que per regla general existix una imatge, que la “cremes” al disc i arreando! Clar com el hardware és sempre el mateix… en tenir una imatge creada ja no fa falta res mes. Aquestes imatges, al menys la del raspbian, ocupen uns 8Gb descompreses i ve un sistema complet amb el seu entorn gràfic i tot.

Aquest era per a mi el problema, que porta massa coses instal·lades. Jo ho vull per a utilitzar-ho com a ‘miniservidoret’ i no necessite tants programes corrent. He vist també que la gent es desinstal·la l’entorn gràfic però vulgues o no sempre es queden paquets instal·lats ocupant espai i/o memòria RAM. He revisat una mica més per la web oficial de Raspbian, allí explica com fer la instal·lació, també hi ha gent que ha fet el seu “unattended installation” i m’ha agradat un que sols fa una instal·lació bàsica i ademés instal·la un servidor SSH per a poder connectar-te. Altre punt a favor es que en compte d’ocupar 8Gb, aquesta cap en 512Mb

Aquesta instal·lació és ben senzilla: Es copia els fitxes que s’indiquen a la targeta microSD, es posa la targeta a la Raspberry i es connecta aquesta a la xarxa elèctrica i a la ethernet. També es pot connectar per HDMI a la televisió i connectar també un teclat però no és necessari, al iniciar buscarà un servidor DHCP per a que li done IP i es connectarà al servidor dels repositoris per a baixar-se el sistema.

Per a copiar els fitxers primer es formata la targeta en FAT32, després d’ací es baixa l’arxiu, que descomprimim el contingut a la targeta. I ja està tot! Ara posar la targeta a la Raspberry, enxufar-la i esperar més o menys 30 minuts. Realment no recorde el que m’ha tardat a mi però en 30 minuts ja està, és més, en la web diu que en 15 minuts ja pots tenir accés SSH (depenent de la teva connexió a internet).

Una vegada acabada la instal·lació es podrà accedir per SSH al ‘aparatet’, la direcció IP la podem averiguar connectant-nos al nostre servidor DHCP (casi sempre el router) i veure la nova concessió.

En la web ens recomana que el primer a fer després de connecar-se per SSH és deshabilitar l’usuari “pi” i canviar la contrasenya de root (per defecte “raspbian”), després configurar el locale (pel tema de configuració regional, teclat,…) i finalment el fús horari. I tot açò es fa d’aquesta manera:
passwd root (per a canviar la contrasenya de root)
dpkg-reconfigure locales (per a reconfigurar el locale)
En aquesta triarem es-ES UTF8
dpkg-reconfigure tzdata (per a configurar el fús horari)
Per a millorar l’administració de la memòra recomanen també instal·lar el següent paquet:
apt-get install raspi-copies-and-fills

Customitzar la instal·lació

També podem definir paràmetres com la IP (per si no tenim servidor DHCP o per si volem assignar-la manualment des d’un principi), la contrasenya de root, fús horari, mirror del repositori…. A la web ho expliquen, simplement és crear un fitxer a l’arrel de la targeta amb el nom de installer-config.txt i després incloure el que volem modificar. A continuació mostre tots els paràmetres que es poden modificar i els seus valors per defecte

preset=server
packages= # comma separated list of extra packages
mirror=http://mirrordirector.raspbian.org/raspbian/
release=wheezy
hostname=pi
domainname=
rootpw=raspbian
cdebootstrap_cmdline=
bootsize=+50M # /boot partition size in megabytes, provide it in the form '+M' (without quotes)
rootsize= # / partition size in megabytes, provide it in the form '+M' (without quotes), leave empty to use all free space
timeserver=time.nist.gov
ip_addr=dhcp
ip_netmask=0.0.0.0
ip_broadcast=0.0.0.0
ip_gateway=0.0.0.0
ip_nameservers=
online_config= # URL to extra config that will be executed after installer-config.txt
usbroot= # set to 1 to install to first USB disk
cmdline="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 elevator=deadline"
rootfstype=ext4
rootfs_mkfs_options=
rootfs_install_mount_options='noatime,data=writeback,nobarrier,noinit_itable'
rootfs_mount_options='errors=remount-ro,noatime'

I això és tot! vos deixe les URL’s d’interés

Pàgina oficial de la Raspberry Pi
Pàgina oficial de Raspbian
Pàgina oficial de la instal·lació