Enlarge your p… partitions (drbd)

Je cherchais un titre valable pour cet article et m’est revenu l’objet des spams du dĂ©but des annĂ©es 2000. Ahhh le bon vieux temps… DĂ©solĂ©, je m’Ă©gare de toute façon je ne pourrai t’apporter la solution que pour : agrandir les partitions de ton système Linux.
Ca aurait pas été un meilleur titre ça, non ?
J’ai Ă©tĂ© rĂ©cemment confrontĂ© Ă des partitions drbd
pleines sur des serveurs virtuels et je voulais prendre en note les opĂ©rations d’extension Ă chaud afin de t’en faire part parce que ça peut faire peur.
Extension du disque
Avant toute chose il faut que tu Ă©tendes la taille du disque de ta vm. Je sais pas ce que tu utilises comme hyperviseur (Xen, Virtualbox, VMWare… etc.) alors, pour cette partie dĂ©brouille-toi ! Mais note bien que si c’est un volume drbd
tu devras le faire sur les deux nœuds.
Comme j’utilise Virtualbox, je ne peux pas modifier les tailles de disque Ă chaud alors je triche mais on va faire comme si ça avait Ă©tĂ© possible… Trop naze Virtualbox !
La problĂ©matique c’est qu’Ă chaud, ton système n’a pas idĂ©e que la taille des disques Ă changĂ©.
root@db-01:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1,9G 0 part [SWAP]
└─sda2 8:2 0 18,1G 0 part /
sdb 8:16 0 5G 0 disk
└─sdb1 8:17 0 5G 0 part
└─drbd0 147:0 0 5G 0 disk /opt/drbd
sr0 11:0 1 1024M 0 rom
root@db-01:~# fdisk -l | grep sdb
Disk /dev/sdb: 5 GiB, 5368709120 bytes, 10485760 sectors
/dev/sdb1 2048 10485759 10483712 5G 83 Linux
Force alors le noyau Ă scanner de nouveau tous les bus, cibles et, LUN "- - -"
, de tous les contrôleurs SCSI exposés dans /sys/class/scsi_host/
.
root@db-01:~# for i in /sys/class/scsi_host/host*/scan ; do echo '- - -' > $i ; done
root@db-01:~# fdisk -l | grep sdb
Disk /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectors
/dev/sdb1 2048 10485759 10483712 5G 83 Linux
Extension de la partition
Ton disque sdb
est bien de 15Go mais ta partition sdb1
ne fait toujours que 5Go. Tu peux l’Ă©tendre avec growpart
, parted
ou, fdisk
. Je te montre avec fdisk
: on casse et recréé la partoche avec le même secteur de départ et sans modifier la signature puis, on écrit les changements.
root@db-01:~# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.
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-31457279, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-31457279, default 31457279):
Created a new partition 1 of type 'Linux' and of size 15 GiB.
Partition #1 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: N
Command (m for help): w
The partition table has been altered.
Syncing disks.
J’ai tapĂ© explicitement les rĂ©ponses Ă chaque fois mais tu auras compris que fdisk
te prends par la main et te propose un choix par dĂ©faut alors il suffit juste de faire EntrĂ©e. ContrĂ´le ta partition et tant qu’Ă faire ton drbd
. Tout va bien !
root@db-01:~# fdisk -l | grep sdb
Disk /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectors
/dev/sdb1 2048 31457279 31455232 15G 83 Linux
root@db-01:~# cat /proc/drbd
version: 8.4.11 (api:1/proto:86-101)
srcversion: 488C1124B879DCE7CD031DA
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:20228 nr:19760 dw:39496 dr:31377 al:19 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
Redimensionner DRBD
Passe ton nĹ“ud primaire en secondaire et redimensionne la ressource. Chez moi, elle s’appelle r0
.
root@db-01:~# drbdadm secondary r0
root@db-01:~# drbdadm status
r0 role:Secondary
disk:UpToDate
peer role:Primary
replication:Established peer-disk:UpToDate
root@db-01:~# drbdadm resize r0
root@db-01:~#
Une resynchronisation de la ressource drbd
s’est lancĂ©e Ă la validation de resize
. Une fois terminée, fais tout de même le resize sur le second serveur et contrôle que tout va bien avec drbd setup
.
root@db-02:~# drbdadm resize r0
root@db-02:~# drbdsetup status r0 --verbose --statistics
r0 role:Primary suspended:no
write-ordering:flush
volume:0 minor:0 disk:UpToDate
size:15727100 read:10516817 written:39496 al-writes:27 bm-writes:0 upper-pending:0 lower-pending:0 al-suspended:no blocked:no
peer connection:Connected role:Secondary congested:no
volume:0 replication:Established peer-disk:UpToDate resync-suspended:no
received:19760 sent:10505668 out-of-sync:0 pending:0 unacked:0
root@db-02:~#
Tu l’as peut-ĂŞtre vu, db2 reste le nĹ“ud primaire, moi ça me dĂ©range. J’ai eu beau lui demander poliment, il a rien voulu savoir.
root@db-01:~# drbdadm primary r0
0: State change failed: (-1) Multiple primaries not allowed by config
Command 'drbdsetup-84 primary 0' terminated with exit code 11
Chteuldi, je vais pas me laisser faire par un drbd
Ă la… oh pardon je m’Ă©nerve. Bref, je vais juste redĂ©marrer heartbeat
sur db2 pour faire basculer ma vip
et drbd
.
root@db-02:~# systemctl restart heartbeat
root@db-02:~# drbdsetup status r0 --verbose --statistics
r0 role:Secondary suspended:no
write-ordering:flush
volume:0 minor:0 disk:UpToDate
size:15727100 read:10516817 written:58956 al-writes:27 bm-writes:0 upper-pending:0 lower-pending:0 al-suspended:no blocked:no
peer connection:Connected role:Primary congested:no
volume:0 replication:Established peer-disk:UpToDate resync-suspended:no
received:39004 sent:10505884 out-of-sync:0 pending:0 unacked:0
Ca va mieux lĂ ! Toi aussi ? Tu crois que c’est fini ? Bah non, regarde ton drbd
fait toujours que 5Go banane !
root@db-01:~# df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev 459M 0 459M 0% /dev
tmpfs 97M 592K 96M 1% /run
/dev/sda2 18G 2,5G 16G 14% /
tmpfs 481M 48M 434M 10% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 97M 0 97M 0% /run/user/0
/dev/drbd0 4,9G 196M 4,4G 5% /opt/drbd
Extension du système de fichiers
Bon toi t’es un vrai barbu, tu l’savais, je t’ai dit « banane » pour rien. Mais moi, je pensais avoir terminĂ© alors que non. Ok dĂ©solĂ©, reste pour la fin de l’article.
Étends la partition avec l’outil adaptĂ© Ă ton type de système de fichier, moi c’est de l’ext4
alors je vais utiliser resize2fs
.
root@db-01:~# resize2fs /dev/drbd0
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/drbd0 is mounted on /opt/drbd; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/drbd0 is now 3931775 (4k) blocks long.
root@db-01:~# df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev 459M 0 459M 0% /dev
tmpfs 97M 592K 96M 1% /run
/dev/sda2 18G 2,5G 16G 14% /
tmpfs 481M 48M 434M 10% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 97M 0 97M 0% /run/user/0
/dev/drbd0 15G 196M 14G 2% /opt/drbd
Tu vois c’est pas si compliquĂ© mĂŞme si la suppression de partition avec fdisk
fait un peu flipper. Dans tout ça mon MySQL fonctionne toujours comme il faut.
mysql> use wordpress;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_wordpress |
+-----------------------+
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_termmeta |
| wp_terms |
| wp_usermeta |
| wp_users |
+-----------------------+
12 rows in set (0,00 sec)
mysql>
Conclusion
Vu qu’on avait fait du drbd
dans le laboratoire haute disponibilitĂ©, je trouvais ça cool de te montrer que mĂŞme avec ce genre de techno un peu sensible c’est parfaitement maintenable (Ă chaud mĂŞme, si tu utilises pas Virtualbox). D’autant plus que cette mĂ©thode fonctionne très bien mĂŞme sans drbd
– tu adapteras au type de stockage (LVM tout ça…) et de système de fichier (coucou XFS…).
