vendredi 15 janvier 2016

Utiliser une clé USB pour les partitions au lieu de la carte SD.



Comme vous le savez peut être, les cartes SD et à fortiori microSD sont limitées en durée de vie.

En effet le nombre d'écritures sur ces supports est limité. Selon la technologie utilisée, elle est estimée entre 10 000 écriture (MLC - multiple-level-cell, 2 bits par cellule) et 100 000 écritures (SLC - single-level-cell, 1 bit par cellule) (1). Ce qui peut paraitre beaucoup, mais peut être peu pour un disque utilisé par un serveur qui va enregistrer et effacer régulièrement des données.

D'où l'intérêt de la commande de contrôle de corruption dont nous avions parlé ici.

Pour limiter ce risque d'usure prématurée l'idée est de déplacer les partitions sur une clé USB dont la durée de vie est plus longue. En plus ça va permettre de donner un peu de volume de données disponibles à notre RPi.


Il faut donc connecter une clé usb au RaspberryPi.


Je contrôle la présence de la clé en regardant quels sont les espaces disponibles sur les disques du RaspberryPi.

pi@gladys:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.2G  2.0G  5.0G  29% /
devtmpfs        214M     0  214M   0% /dev
tmpfs           218M     0  218M   0% /dev/shm
tmpfs           218M   25M  193M  12% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           218M     0  218M   0% /sys/fs/cgroup
/dev/mmcblk0p1   60M   20M   41M  34% /boot
tmpfs            44M     0   44M   0% /run/user/0
tmpfs            44M     0   44M   0% /run/user/1000


Pas de clé usb visible, il faut donc que je trouve comment la rendre visible et accessible.

Google est mon ami, "monter une clé usb sur raspberry pi".

Après quelques essais infructueux je me rends compte que ma clé est formatée avec microsoft et donc non vue par le RPi, donc plutôt que de passer sur des configurations alambiquées (du moins elles me le paressent), je pars sur une nouvelle solution, formater cette clé en ext 3 qui est le format utilisé par les système linux dont notre Raspbian.

Il me faut donc déjà savoir où se situe ma clé usb, je la déconnecte la reconnecte et aussitôt lance la commande  dmesg | tail

pi@gladys:~ $ dmesg | tail
[ xxxx.xxxxxx] sd 0:0:0:0: [sda] 125042688 512-byte logical blocks: (64.0 GB/59.6 GiB)[ xxxx.xxxxxx] sd 0:0:0:0: [sda] Write Protect is off[ xxxx.xxxxxx] sd 0:0:0:0: [sda] Mode Sense: 23 00 00 00[ xxxx.xxxxxx] sd 0:0:0:0: [sda] Write cache: disabled, read cache: disabled, doesn't support DPO or FUA[ xxxx.xxxxxx] sd 0:0:0:0: [sda] Attached SCSI removable disk

me permet de situer ma clé USB en sda, puis comme elle est notée "Attached" je la démonte :

pi@gladys:~ $ sudo umount /dev/sda
umount: /dev/sda: not mounted

Maintenant qu'elle n'est plus montée je peut lancer le formatage

pi@gladys:~ $ sudo fdisk /dev/sda

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

/dev/sda: device contains a valid 'ext3' signature, it's strongly recommended to wipe the device by command wipefs(8) if this setup is unexpected to avoid possible collisions.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x0f5ff543.

Command (m for help):
 


Bon là on me propose de l'aide je saisi "m"

Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table


Command (m for help):


J'aperçois une option "n" qui me propose d'ajouter une nouvelle partition.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p):


Je saisis "p" pour primaire

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):


Je saisi "1" puisque c'est la première :

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-125042687, default 2048):


Je fais "entrée" pour garder l'option par défaut :

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-125042687, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-125042687, default 125042687):


 Comme je ne souhaites qu'une seule partition je fais de nouveau "entrée"

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-125042687, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-125042687, default 125042687):

Created a new partition 1 of type 'Linux' and of size 59.6 GiB.

Command (m for help):


Il me dit que j'ai une partition de type linux de 59.6 giga soit la taille de ma clé.

Je format en "ext4"

pi@gladys:~ $ sudo mkfs.ext4 /dev/sda
mke2fs 1.42.12 (29-Aug-2014)
/dev/sda contains a ext3 file system
        last mounted on Thu Jan 14 16:25:29 2016
Proceed anyway? (y,n) y
Creating filesystem with 15630336 4k blocks and 3907584 inodes
Filesystem UUID: 9a5c610e-d5bd-4998-ace6-c3d05ee39f3a
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424

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


 Je monte la clé :

pi@gladys:~ $  sudo mkdir /tmp/usb_root
pi@gladys:~ $  sudo mount /dev/sda1 /tmp/usb_root
pi@gladys:~ $ sudo mount /dev/sda /tmp/usb_root

Je regarde mes partitions :

pi@gladys:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.2G  2.0G  5.0G  29% /
devtmpfs        214M     0  214M   0% /dev
tmpfs           218M     0  218M   0% /dev/shm
tmpfs           218M  4.5M  213M   3% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           218M     0  218M   0% /sys/fs/cgroup
/dev/mmcblk0p1   60M   20M   41M  34% /boot
tmpfs            44M     0   44M   0% /run/user/0
tmpfs            44M     0   44M   0% /run/user/1000
/dev/sda         59G   52M   56G   1%
/tmp/usb_root

Elle est bien là.

J'installe  rsync :

pi@gladys:~ $ sudo apt-get install rsync
Reading package lists... Done
Building dependency tree
Reading state information... Done
rsync is already the newest version.
rsync set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.


Il est déja installé, OK. Je stoppe Gladys par précaution.

pi@gladys:~ $ sudo pm2 stop gladys
[PM2] Stopping gladys
[PM2] stopProcessId process id 0
┌──────────┬────┬──────┬─────┬─────────┬─────────┬────────┬────────┬──────────┐
│ App name │ id │ mode │ pid │ status  │ restart │ uptime │ memory │ watching │
├──────────┼────┼──────┼─────┼─────────┼─────────┼────────┼────────┼──────────┤
│ gladys   │ 0  │ fork │ 0   │ stopped │ 0       │ 0      │ 0 B    │ disabled │
└──────────┴────┴──────┴─────┴─────────┴─────────┴────────┴────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app


OK

Je crée un répertoire temporaire pour "dupliquer" ce qui sert en ce moment

pi@gladys:~ $ sudo mkdir /tmp/sd_root


Je le monte avec l'option -bind pour la lier à la partition principale qui sert en ce moment

pi@gladys:~ $ sudo mount --bind / /tmp/sd_root/

Je vérifie que tout est là :

pi@gladys:/ $ ls -l /tmp/sd_root/
total 92
drwxr-xr-x  2 root root  4096 Jan 14 15:52 bin
drwxr-xr-x  3 root root  4096 Nov 21 21:32 boot
drwxr-xr-x  5 root root  4096 Jan  1  1970 boot.bak
drwxr-xr-x  4 root root  4096 Nov 21 19:51 dev
drwxr-xr-x 88 root root  4096 Jan 14 15:52 etc
drwxr-xr-x  3 root root  4096 Nov 21 21:32 home
drwxr-xr-x 19 root root  4096 Jan 14 15:52 lib
drwx------  2 root root 16384 Nov 21 20:35 lost+found
drwxr-xr-x  2 root root  4096 Nov 21 19:50 media
drwxr-xr-x  3 root root  4096 Jan 14 15:50 mnt
drwxr-xr-x  3 root root  4096 Nov 21 21:32 opt
drwxr-xr-x  2 root root  4096 Jan  7  2015 proc
drwx------  6 root root  4096 Jan 13 10:35 root
drwxr-xr-x  5 root root  4096 Nov 21 21:38 run
drwxr-xr-x  2 root root  4096 Jan 14 15:52 sbin
drwxr-xr-x  2 root root  4096 Nov 21 19:50 srv
drwxr-xr-x  2 root root  4096 Apr 12  2015 sys
drwxrwxrwt 10 root root  4096 Jan 15 12:25 tmp
drwxr-xr-x 10 root root  4096 Nov 21 19:50 usr
drwxr-xr-x 12 root root  4096 Dec  2 17:26 var

 

OK j'ouvre un screen car l'opération suivante est longue si la connection ssh plante l'opération ira à son terme :

pi@gladys:/ $ screen

Là faut être patient ..............................................................................

pi@gladys:/ $ sudo rsync -avh --exclude 'tmp/' --exclude 'boot/' /tmp/sd_root/ /tmp/usb_root/
 
 
Après quelques minutes :

sent 1.91G bytes  received 1.30M bytes  2.90M bytes/sec
total size is 1.90G  speedup is 1.00


Un df pour savoir où on en est :

pi@gladys:/ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.2G  2.5G  4.5G  36% /
devtmpfs        214M     0  214M   0% /dev
tmpfs           218M     0  218M   0% /dev/shm
tmpfs           218M  4.6M  213M   3% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           218M     0  218M   0% /sys/fs/cgroup
/dev/mmcblk0p1   60M   20M   41M  34% /boot
tmpfs            44M     0   44M   0% /run/user/0
tmpfs            44M     0   44M   0% /run/user/1000
/dev/sda         59G  2.1G   54G   4% /tmp/usb_root


Changer les partitions à monter lors du démarrage. Ca se passe dans le fichier /etc/fstab. Pour nous ça sera /tmp/usb_root/etc/fstab. Remplacer la ligne :

/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
 
Par

/dev/sda  /               ext4    defaults,noatime  0       1

 Dernière étape, modifier la carte SD pour démarrer sur la clé USB. Modifier le fichier /boot/cmdline.txt et remplacer par /dev/sda. Vous devriez avoir la ligne suivante :

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda rootfstype=ext4 elevator=deadline rootwait logo.nologo 

Et pour finir

pi@gladys:/ $  sudo reboot

Là il faut patienter quelques minutes ......

Tadaaaaaaaaaaaaaaaaaa .....

pi@gladys:~ $ sudo pm2 start gladys
[PM2] restartProcessId process id 0
[PM2] Process successfully started
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────────────┬──────────┐
App name id mode pid  status restart uptime memory      watching
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────────────┼──────────┤
gladys   │ 0  │ fork │ 3016 │ online │ 0       │ 1s     │ 11.883 MB   │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app



Gladys démarre

Et gladys fonctionne, du moins son interface web







Encore un pas de fait.

A ce stade je ne sait juste pas où sont passé les presque 8 giga de la carte SD et comment je pourrais ( si ça a un intérêt pour la durée de vie)  le /boot sur ces 8 Go.




pi@gladys:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        59G  2.1G   54G   4% /
devtmpfs        214M     0  214M   0% /dev
tmpfs           218M     0  218M   0% /dev/shm
tmpfs           218M  4.6M  213M   3% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           218M     0  218M   0% /sys/fs/cgroup
/dev/mmcblk0p1   60M   20M   41M  34% /boot
tmpfs            44M     0   44M   0% /run/user/0
tmpfs            44M     0   44M   0% /run/user/1000



Peut là une piste d'amélioration ????



Sources:

Cartes SD :

https://fr.wikipedia.org/wiki/Carte_SD

Cartes micro SD :

https://fr.wikipedia.org/wiki/Carte_microSD 

Partitionner et formater une clé USB :

http://dmesg.fr/gestion-hardware/56-formater-disque-dur-cle-usb-linux

Déplacer les partitions sur clé USB :

http://www.pihomeserver.fr/2013/06/10/raspberry-pi-home-server-utiliser-une-cle-usb-pour-vos-partitions/

Mémoire flash :

https://fr.wikipedia.org/wiki/M%C3%A9moire_flash

(1)  http://www.edn.com/design/systems-design/4320024/What-is-the-difference-between-SLC-and-MLC- 

Aucun commentaire:

Enregistrer un commentaire