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