En aquest article t'explique com he redimensionat el meu servidor FreeBSD 13 que tinc a la Raspberry funcionant 24x7 i que estava quedant-se sense espai.
Ja fa mesos que vaig comprar una microSD de 128G i vaig clonar l'anterior microSD de 64G, i tot funcionava bé però la partició arrel / no detectava 128G sinó 64G, però com que estava en moltes coses, no em va preocupar massa solventar eixe tema.
Però des de juliol ja tenia el servidor a més del 90% d'espai ocupat, el 90% de 64G d'espai, on li donava 50G a la partició arrel (/) on tinc totes les bases de dades i projectes web, i em preocupava trencar-lo i que després tinguera problemes de recuperació de fitxers i bases de dades o que fins i tot no puguera iniciar el sistema. I hui ha segut un gran dia, ja que he pogut trovar finalment la solució que ara et contaré :)
Vaig comprar una nova microSD de 256G de les ràpides, les de classe 10 U3 V30, que ja tinc comprovades que tenen molt bon funcionament a la Raspberry Pi 4.
El meu objectiu és donar-li tot l'espai que puga a la partició /, que té format ufs. Nomès he fet servir 4 passos:
- 1. Fem un backup.
- 2. Estat de les particions de la microSD
- 3. Esborrem particions entre l'espai lliure la partició UFS arrel.
- 4. Tornem a crear la partició swap.
- 5. Redimensionem amb growfs.
I ara a continuació t'ho explique amb més detall.
FEM UNA CÒPIA DE SEGURETAT DE LA MICROSD
Primer de tot, crearem una imatge de la tarjeta microSD actual de 128GB:
# dd if=/dev/da0 of=/home/joan/backup_microsd.img bs=32M
3810+1 records in
3810+1 records out
127865454592 bytes transferred in 5501.407988 secs (23242314 bytes/sec)
Ara copiem la imatge en la nova tarjeta de 256GB:
# dd if=/home/joan/backup_microsd.img of=/dev/da0 bs=32M
3810+1 records in
3810+1 records out
127865454592 bytes transferred in 1776.575740 secs (71972982 bytes/sec)
Ja tenim la tarjeta clonada, i a banda la imatge backup_microsd.img que ens sevirà de recuperació per si no ens ix bé l'experiment i volem tornar a provar.
ESTAT DE LES PARTICIONS DE LA MICROSD
Bé, a continuació, introduirem aquesta nova tarjeta de 256GB en la Raspberry Pi de desenvolupament i iniciarem el sistema. Una vegada ens autentiquem, comprovarem l'espai que tenim a les particions:
$ df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ufs/rootfs 52G 45G 3.1G 93% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/msdosfs/MSDOSBOOT 50M 25M 25M 49% /boot/msdos
tmpfs 9.3G 4.0K 9.3G 0% /tmp
Seguim tenint un disc dur de 52G que munta / i que tenim, ara, al 93%, però aparentment no ens ha detectat que estem sobre una tarjeta microSD més gran.
Mirem les particions que tenim a la MicroSD amb:
# gpart show
=> 63 499744705 mmcsd0 MBR (238G)
63 1985 - free - (993K)
2048 102400 1 fat32lba [active] (50M)
104448 499640320 2 freebsd (238G)
#
=> 0 499640320 mmcsd0s2 BSD (238G)
0 128 - free - (64K)
128 112150400 1 freebsd-ufs (53G)
112150528 12476416 2 freebsd-swap (5.9G)
124626944 375013376 - free - (179G)
Aleshores, en mmcsd0s2, detecta que tinc una microSD amb 238G de capacitat.
ESBORREM PARTICIONS ENTRE L'ESPAI LLIURE I LA PARTICIÓ UFS ARREL
Necessite ampliar la partició nº1 de mmcsd0s2 però després, abans de l'espai lliure de 179G hi ha una swap (de 5.9G), i necessitem esborrar-la primer, perquè per a poder redimensionar amb gpart no ha d'haver cap paritició enmig entre la partició que volem redimensionar i l'espai lliure.
# gpart delete -i 2 mmcsd0s2
gpart: Device busy
No em deixa esborrar la partició swap perquè està muntada. He de desmuntar la partició primer.
Editarem el fitxer /etc/fstab i comentarem la línia que munta la partició swap en l'arranc del sistema:
# Custom /etc/fstab for FreeBSD embedded images
/dev/ufs/rootfs / ufs rw 1 1
/dev/msdosfs/MSDOSBOOT /boot/msdos msdosfs rw,noatime 0 0
tmpfs /tmp tmpfs rw,mode=1777 0 0
#Comente la línia següent:
#/dev/label/growfs_swap none swap sw 0 0
I reiniciarem la màquina:
$ doas shutdown -r now
Ara ja em deixa esborrar-la:
# gpart delete -i 2 mmcsd0s2
mmcsd0s2b deleted
Si ara tornem a consultar les particions que tenim, veiem que ja no tenim la partició swap i que la partició amb espai lliure de 185G està just al costat de l'arrel del nostre sistema (partició freebsd-ufs amb 53G):
# gpart show
=> 63 499744705 mmcsd0 MBR (238G)
63 1985 - free - (993K)
2048 102400 1 fat32lba [active] (50M)
104448 499640320 2 freebsd (238G)
#
=> 0 499640320 mmcsd0s2 BSD (238G)
0 128 - free - (64K)
128 112150400 1 freebsd-ufs (53G)
112150528 387489792 - free - (185G)
Ara ja és possible redimensionar la partició i tornar a crear una partició swap. El primer pas és aturar la protecció de la partició ficant un 'flag' o una marca al kernel.
# sysctl kern.geom.debugflags=16
kern.geom.debugflags: 0 -> 16
Ara, dels 185G que hi ha en l'espai lliure, anem a agafar 180G i anem a sumar-los a l'actual partició nº 1 freebsd-usb que actualment té 53G, és a dir, que al final tindrà 233G de grandària. I farem l'ampliació així:
# gpart resize -i 1 -s 233G -a 4k mmcsd0s2
mmcsd0s2a resized
Si ara mirem com ha quedat el resultat que tenim de moment, veurem que la partició arrel del sistema amb el format freebsd-ufs ja té 233G:
# gpart show
=> 63 499744705 mmcsd0 MBR (238G)
63 1985 - free - (993K)
2048 102400 1 fat32lba [active] (50M)
104448 499640320 2 freebsd (238G)
#
=> 0 499640320 mmcsd0s2 BSD (238G)
0 128 63
- free - (64K)
128 488636416 1 freebsd-ufs (233G)
488636544 11003776 - free - (5.2G)
TORNEM A CREAR LA PARTICIÓ SWAP
Ara ens queda crear la partició swap:
# gpart add -t freebsd-swap -a 4k mmcsd0s2
mmcsd0s2b added, but partition is not aligned on 4194304 bytes
Si ara tornem a mirar l'estat de les nostres particions veiem que ja tenim la swap creada amb 5G d'espai:
# gpart show
+
=> 63 499744705 mmcsd0 MBR (238G)
63 1985 - free - (993K)
2048 102400 1 fat32lba [active] (50M)
104448 499640320 2 freebsd (238G)
#
=> 0 499640320 mmcsd0s2 BSD (238G)
0 128 - free - (64K)
128 488636416 1 freebsd-ufs (233G)
488636544 11003776 2 freebsd-swap (5.2G)
REDIMENSIONEM AMB GROWFS
La solució per engrandir les particions la tenim en el programari growfs, aleshores afegirem a /etc/rc.conf la línia:
growfs_enable="YES"
Ara reiniciem el sistema:
$ shutdown -h now
Ara he llevat la microSD de la tarjeta i l'he muntada en una altra màquina, amb FreeBSD també, i he executat growfs des d'allí:
# growfs /dev/da0s2a
Device is mounted read-write; resizing will result in temporary write suspension for /media/da0s2a.
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/da0s2a, mounted on /media/da0s2a, from 53GB to 233GB? [yes/no] yes
super-block backups (for fsck_ffs -b #) at:
112679616, 113960064, 115240512, 116520960, 117801408, 119081856, 120362304, 121642752, 122923200,
124203648, 125484096, 126764544, 128044992, 129325440, 130605888, 131886336, 133166784, 134447232,
135727680, 137008128, 138288576, 139569024, 140849472, 142129920, 143410368, 144690816, 145971264,
147251712, 148532160, 149812608, 151093056, 152373504, 153653952, 154934400, 156214848, 157495296,
158775744, 160056192, 161336640, 162617088, 163897536, 165177984, 166458432, 167738880, 169019328,
170299776, 171580224, 172860672, 174141120, 175421568, 176702016, 177982464, 179262912, 180543360,
181823808, 183104256, 184384704, 185665152, 186945600, 188226048, 189506496, 190786944, 192067392,
193347840, 194628288, 195908736, 197189184, 198469632, 199750080, 201030528, 202310976, 203591424,
204871872, 206152320, 207432768, 208713216, 209993664, 211274112, 212554560, 213835008, 215115456,
216395904, 217676352, 218956800, 220237248, 221517696, 222798144, 224078592, 225359040, 226639488,
227919936, 229200384, 230480832, 231761280, 233041728, 234322176, 235602624, 236883072, 238163520,
239443968, 240724416, 242004864, 243285312, 244565760, 245846208, 247126656, 248407104, 249687552,
250968000, 252248448, 253528896, 254809344, 256089792, 257370240, 258650688, 259931136, 261211584,
262492032, 263772480, 265052928, 266333376, 267613824, 268894272, 270174720, 271455168, 272735616,
274016064, 275296512, 276576960, 277857408, 279137856, 280418304, 281698752, 282979200, 284259648,
285540096, 286820544, 288100992, 289381440, 290661888, 291942336, 293222784, 294503232, 295783680,
297064128, 298344576, 299625024, 300905472, 302185920, 303466368, 304746816, 306027264, 307307712,
308588160, 309868608, 311149056, 312429504, 313709952, 314990400, 316270848, 317551296, 318831744,
320112192, 321392640, 322673088, 323953536, 325233984, 326514432, 327794880, 329075328, 330355776,
331636224, 332916672, 334197120, 335477568, 336758016, 338038464, 339318912, 340599360, 341879808,
343160256, 344440704, 345721152, 347001600, 348282048, 349562496, 350842944, 352123392, 353403840,
354684288, 355964736, 357245184, 358525632, 359806080, 361086528, 362366976, 363647424, 364927872,
366208320, 367488768, 368769216, 370049664, 371330112, 372610560, 373891008, 375171456, 376451904,
377732352, 379012800, 380293248, 381573696, 382854144, 384134592, 385415040, 386695488, 387975936,
389256384, 390536832, 391817280, 393097728, 394378176, 395658624, 396939072, 398219520, 399499968,
400780416, 402060864, 403341312, 404621760, 405902208, 407182656, 408463104, 409743552, 411024000,
412304448, 413584896, 414865344, 416145792, 417426240, 418706688, 419987136, 421267584, 422548032,
423828480, 425108928, 426389376, 427669824, 428950272, 430230720, 431511168, 432791616, 434072064,
435352512, 436632960, 437913408, 439193856, 440474304, 441754752, 443035200, 444315648, 445596096,
446876544, 448156992, 449437440, 450717888, 451998336, 453278784, 454559232, 455839680, 457120128,
458400576, 459681024, 460961472, 462241920, 463522368, 464802816, 466083264, 467363712, 468644160,
469924608, 471205056, 472485504, 473765952, 475046400, 476326848, 477607296, 478887744, 480168192,
481448640, 482729088, 484009536, 485289984, 486570432, 487850880
Finalment desmunte la microSD, la inserte en la Raspberry Pi de desenvolupament i inicie el sistema, i ja em detecta que tinc 226G en la partició arrel "/":
[joan@mercuri ~]$ df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ufs/rootfs 226G 47G 161G 23% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/msdosfs/MSDOSBOOT 50M 25M 25M 49% /boot/msdos
tmpfs 7.3G 4.0K 7.3G 0% /tmp
Ja tenim el nostre sistema funcionant i ja tenim la partició arrel amb 226G. Dóna gust veure que ara nomès estem fent servir el 23% de la capacitat del disc :) Faena feta, fa goig.