Monter un NAS en raid 1 sur Raspberry

raspberrylogo

Présentation d’une procédure pour créer un raid logiciel sous Raspbian Stretch à l’aide de mdadm

Update du système

sudo apt-get update && sudo apt-get upgrade -y

Identification des disques

pi@ninive:~ $ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 298.1G  0 disk
sdb           8:16   0 298.1G  0 disk
mmcblk0     179:0    0   7.3G  0 disk
├─mmcblk0p1 179:1    0  41.5M  0 part /boot
└─mmcblk0p2 179:2    0   7.3G  0 part /
  • mmcblk0 : carte SD système hote
  • sda,sdb : deux disques durs 2.5 pouces

Création des deux partitions

sudo cfdisk /dev/sda
sudo cfdisk /dev/sdb

On se retrouve dans cette configuration

pi@ninive:~ $ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 298.1G  0 disk
└─sda1        8:1    0   298G  0 part
sdb           8:16   0 298.1G  0 disk
└─sdb1        8:17   0   298G  0 part
mmcblk0     179:0    0   7.3G  0 disk
├─mmcblk0p1 179:1    0  41.5M  0 part /boot
└─mmcblk0p2 179:2    0   7.3G  0 part /

Création de l’aggrégat

mdadm --create -l 1 -n 2 /dev/md0 /dev/sd[ab]1

mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
  • l : pour type de raid
  • n : pour nombre de disques
  • /dev/md0 : nom de mon aggrégat
  • /dev/sd[ab]1 : partition à utiliser pour l’agrégat via regex

Création d’une partition sur le nouvel aggrégat

sudo cfdisk /dev/md0
Syncing disks.

On constate la bonne création sur l’aggrégat

pi@ninive:~ $ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda           8:0    0 298.1G  0 disk
└─sda1        8:1    0   298G  0 part
  └─md0       9:0    0 297.9G  0 raid1
    └─md0p1 259:1    0 297.8G  0 md
sdb           8:16   0 298.1G  0 disk
└─sdb1        8:17   0   298G  0 part
  └─md0       9:0    0 297.9G  0 raid1
    └─md0p1 259:1    0 297.8G  0 md
mmcblk0     179:0    0   7.3G  0 disk
├─mmcblk0p1 179:1    0  41.5M  0 part  /boot
└─mmcblk0p2 179:2    0   7.3G  0 part  /

Formatage en EXT4

pi@ninive:~ $ sudo mkfs.ext4 /dev/md0p1 -L ROOTRAID1
mke2fs 1.43.4 (31-Jan-2017)
Creating filesystem with 78061568 4k blocks and 19521536 inodes
Filesystem UUID: 0bb9aa83-4311-4a6c-8be3-51f6210ead6d
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616

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

Creation du dossier de reception pour le point de montage

sudo mkdir /mnt/sumo

Montage manuel de la partition

sudo mount -t ext4 /dev/md0p1 /mnt/sumo

Montage automatique au boot

sudo nano /etc/fstab
/dev/md0p1    /mnt/sumo    ext4    defaults    0    0

Installation des outils samba pour créer un partage réseau

sudo apt-get install samba samba-common cifs-utils

Création du dossier de reception des partages

sudo mkdir /mnt/sumo/SHAREME

Sauvegarde du fichier de configuration original

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.orgi

Ouverture fichier de configuration samba, éditez les options suivantes

sudo nano /etc/samba/smb.conf
interfaces = 127.0.0.0/8 eth0

[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700
[homeSHAREME]
   comment= Dossier Partage source
   path=/mnt/sumo/SHAREME
   browseable=Yes
   writeable=Yes
   only guest=no
   create mask=0777
   directory mask=0777
   public=no
sudo adduser monuser
sudo chown -R monuser:monuser /mnt/sumo/SHAREME

Ajout d’un utilisateur pour mon partage

sudo smbpasswd -a monuser

Redémarrer le raid 1 sur un nouveau système

Restauration d’un aggrégat sur un nouveau système

mdadm --assemble --run --force --update=resync /dev/md0 /dev/sda1 /dev/sdb1

Si lors du mount, impossible de trouver le superblock

sudo mount -t ext4 /dev/md0p1 /mnt/sumo
mount: /dev/md0p1: can't read superblock

Pour résoudre cela on lance un check de la partition (c’est du : ext4)

pi@ninive:~ $ sudo fsck.ext4 /dev/md0p1
e2fsck 1.43.4 (31-Jan-2017)
ROOTRAID1: recovering journal
JBD2: Invalid checksum recovering block 25 in log
JBD2: Invalid checksum recovering block 3 in log
JBD2: Invalid checksum recovering block 4 in log
Journal checksum error found in ROOTRAID1
ROOTRAID1 was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
/lost+found not found.  Create<y>? yes
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (76557547, counted=67959223).
Fix<y>? yes
Free inodes count wrong (19521522, counted=19520826).
Fix<y>? yes

ROOTRAID1: ***** FILE SYSTEM WAS MODIFIED *****
ROOTRAID1: 710/19521536 files (8.5% non-contiguous), 10102345/78061568 blocks

Laisser un commentaire