Table of Contents

Mover el filesystem de la Raspberry Pi a un disco USB.

Tiene un poco de acá. sobre cómo hacerlo con particiones GPT (la que funcionó): http://dietpi.com/phpbb/viewtopic.php?f=12&t=375#p1655

y otro poco de acá para ver lo del pagefile y algunos detalles: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=44177

Software necesario

Instalar rsync para poder mover el FS al dispositivo USB. Además gdisk para particionar en modo GPT.

apt-get install gdisk rsync

Preparar el dispositivo particionando y formateando.

Ver si aparece /dev/sda, que va a ser el HDD USB.

    rroot@RPi-B-Plus:~# lsblk
    NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda           8:0    1 29.5G  0 disk
    └─sda1        8:1    1 29.5G  0 part
    mmcblk0     179:0    0  7.4G  0 disk
    ├─mmcblk0p1 179:1    0   60M  0 part /boot
    └─mmcblk0p2 179:2    0  7.4G  0 part /

El ejemplo tiene un pendrive Patriot de 32 Gb…

Ver que SDAx no esté montada!! desmontar si fuese necesario.

Elegir el drive en gdisk y obtener la información

root@RPi-B-Plus:~# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.10

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


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************

Warning! Main partition table overlaps the first partition by 32 blocks!
You will need to delete this partition or resize it in another utility.

Warning! Secondary partition table overlaps the last partition by
33 blocks!
You will need to delete this partition or resize it in another utility.

Command (? for help): i
Using 1
Partition GUID code: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Microsoft basic data)
Partition unique GUID: FFEE1EB9-FE0D-4422-A3BE-5DEC4CB9F1DA
First sector: 2 (at 1024 bytes)
Last sector: 61800447 (at 29.5 GiB)
Partition size: 61800446 sectors (29.5 GiB)
Attribute flags: 0000000000000000
Partition name: 'Microsoft basic data' 

Borrar las particiones…

Command (? for help): d
Using 1

Dice using 1 porque es la partición 1, la única que encontró. Ver con ? qué opciones hay para borrar otras pariciones en el caso que haya más de una. (probablemente sea d #, no sé)

…y crear la partición que se va a utilizar para el sistema operativo y programas (lo que está en la uSD)

Usar el número de sector o el tamaño. O enter enter enter enter para usar el disco completo.

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

Escribir los cambios en el disco…

    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.

Con lsblk debería aparecer SDA1 creada con el tamaño especificado antes.

Formatear la partición, por ejemplo en EXT4, que funciona bien

    root@RPi-B-Plus:~# mke2fs -t ext4 -L rootfs /dev/sda1
    mke2fs 1.42.12 (29-Aug-2014)
    Creating filesystem with 7725047 4k blocks and 1933312 inodes
    Filesystem UUID: 2c35b4da-c18a-4277-9db4-2ba592475e26
    Superblock backups stored on blocks:
            32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
            4096000

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

y montarla para poder trabajar…

    root@RPi-B-Plus:~# mount /dev/sda1 /mnt/usb_1/

Mover el filesystem, modificar los parámetros de arranque y modificar además ''fstab'' para que se monte sola la partición al inicio.

Conseguir la UUID de la partición, lsblk -f devuelve la columna con las UUID de cada partición.

root@oDroid-C1-TEST:~# lsblk -f
NAME        FSTYPE LABEL  UUID                                 MOUNTPOINT
sda
└─sda1      ext4          abe28749-d59f-415b-9b60-75b1007eeee9 /mnt/usb_1
mmcblk0
├─mmcblk0p1 vfat   BOOT   6E35-5356                            /boot
└─mmcblk0p2 ext4   rootfs e139ce78-9841-40fe-8823-96a304a09859 /

Hacer un backup de cmdline.txt que está en /boot/ (es la partición boot de la uSD). Ese archivo de texto contiene la información de arranque.

En el caso que no funcione la nueva configuración, solamente hay que poner la tarjeta de memoria en otra máquina, borrar el archivo modificado (o renombrar) y renombrar cmdline.txt.sdcard a cmdline.txt. Entonces:

    root@RPi-B-Plus:~# cp /boot/cmdline.txt /boot/cmdline.txt.sdcard
    root@RPi-B-Plus:~# nano /boot/cmdline.txt

Editar root= para que use la Partition UUID que se obtuvo anteriormente

    dwc_otg.lpm_enable=0 console=tty1 root=PARTUUID=7D25B382-0D0F-4EDD-B044-E41ADE98A451 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait rootdelay=10

rootdelay está en segundos, es la espera hasta que root esté listo. Usar un valor mayor que 5 para garantizar que el disco encienda y se encuentre listo.

Copiar / a la partición del HDD USB. Primero detener los servicios…

    root@RPi-B-Plus:~# /DietPi/dietpi/dietpi-services stop

y copiar todo a la nueva partición

    root@RPi-B-Plus:~# rsync -axv / /mnt/usb_1/
    ...
    sent 756,662,697 bytes  received 348,462 bytes  2,737,834.21 bytes/sec
    total size is 755,276,856  speedup is 1.00

Le toma un tiempo. De paso muestra el progreso de los archivos que se copian.

Obtener la UUID del filesystem…

    root@RPi-B-Plus:~# tune2fs -l /dev/sda1
    tune2fs 1.42.12 (29-Aug-2014)
    Filesystem volume name:   rootfs
    Last mounted on:          /mnt/usb_1
    Filesystem UUID:          2c35b4da-c18a-4277-9db4-2ba592475e26
    ...

En el ejemplo, UUID=2c35b4da-c18a-4277-9db4-2ba592475e26

Hacer un backup de fstab (que ya está en la nueva partición) y editarlo

    root@RPi-B-Plus:~# cp /mnt/usb_1/etc/fstab /mnt/usb_1/etc/fstab.sdcard
    root@RPi-B-Plus:~# nano /mnt/usb_1/etc/fstab

Este paso es crítico, acá se le indica al S.O. qué particiones montar durante el arranque.

Comentar /dev/mmcblk0p2para que no intente montar la partición de sistema de la uSD. Agregar una línea con /dev/disk/by-uuid/—UUID— para que se monte la nueva partición de sistema.

#Internal Drives---------------------------------------------------
proc            /proc           proc    defaults                                                                        0 0
/dev/mmcblk0p1  /boot           vfat    defaults,noatime,discard                                                        0 2
## root on SD-card
### /dev/mmcblk0p2  /               ext4    defaults,noatime,discard                                                    0 1
## root on USB device
/dev/disk/by-uuid/2c35b4da-c18a-4277-9db4-2ba592475e26     /          ext4    defaults,noatime,nodiratime               0 1
tmpfs                   /tmp                    tmpfs   defaults,noatime,nodev,nosuid,mode=1777                         0 0
tmpfs                   /var/log                tmpfs   defaults,size=20m,noatime,nodev,nosuid,mode=1777                        0 0
tmpfs                   /DietPi                 tmpfs   defaults,size=10m,noatime,nodev,nosuid,mode=1777                0 0

Comentar las lineas de discos externos que se montan automáticamente al inicio, si hubiese, que hagan referencia a /dev/sda1 —→ /mnt/usb_1

    #External Drives---------------------------------------------------
    # - Try and use only ext4 for USB drives
    # - Faster performance than NTFS, espically on RPi v1
    ## /dev/sda1       /mnt/usb_1      ext4    defaults,noatime,nofail                    0       0
    #/dev/sda1       /mnt/usb_1      ntfs-3g    defaults,permissions,noatime,nofail       0       0

Guardar el archivo.

Desmontar el dispositivo.

    root@RPi-B-Plus:~# umount /dev/sda1

Reiniciar la Raspberry…

    root@RPi-B-Plus:~# reboot

Si está todo bien, el LED de ACT de la placa va a titilar un poco, el LED del adaptador USB → SATA va a mostrar bastante actividad en el disco. Si hubiera un monitor conectado, debería arrancar normalmente el sistema opertativo.

Corroborar que estén todas las particiones en su lugar

root@RPi-B-Plus:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        29G  813M   27G   3% /
devtmpfs        238M     0  238M   0% /dev
tmpfs           242M     0  242M   0% /dev/shm
tmpfs           242M  4.4M  237M   2% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           242M     0  242M   0% /sys/fs/cgroup
tmpfs            10M  1.1M  9.0M  11% /DietPi
tmpfs            20M   12K   20M   1% /var/log
tmpfs           242M     0  242M   0% /tmp
/dev/mmcblk0p1   60M   22M   39M  36% /boot

Crear el pagefile

Con top o htop se puede ver el tamaño del swapfile. Ahora se puede poner el swapfile en el disco USB

Solamente hay que editar un archivo.

root@RPi-B-Plus:~# nano /etc/dphys-swapfile

y cambiar el valor CONF_SWAPSIZE= a la cantidad requerida. Puede haber otra línea que apunta a un directorio en particular para ubicar el swapfile. Se puede usar o borrar para usar la ubicación por defecto.

Para que lea el nuevo valor…

root@RPi-B-Plus:~# dphys-swapfile setup

y aplique los cambios

root@RPi-B-Plus:~# dphys-swapfile restart

Listo. Ahora con top o htop se deberían ver reflejados los cambios.