Avant propos
Linux gère de nombreux systèmes de fichiers. Les plus connus et utilisés sont ext2 et ext3, mais j’utilise régulièrement d’autres système de fichiers comme reiserfs ou xfs.
Quand je prépare un disque dur pour une installation d’une Debian, j’ai en général un disque dur en réserve qui est déjà installé avec Debian Sarge. J’installe donc ce disque dur de réserve en tant que disque primaire et j’installe le disque que je dois préparer en disque secondaire.
Je démarre donc l’ordinateur sur mon disque primaire, et miracle, Debian Sarge est déjà prêt ;)
Information sur le disque
Pour information, le disque que je prépare est le suivant :
IBM Deskstar
Model: IC35L040AVER07-0
Capacity: 41.0 GB
RPM: 7200RPM
P/N: 07N6654
MLC: H32161
LBA: 80.418.240 Sectors
CHS: 16383/16/63
Mais en fait, hdparm me l’aurait très bien dit :
# hdparm -I /dev/hdb
/dev/hdb:
ATA device, with non-removable media
powers-up in standby; SET FEATURES subcmd spins-up.
Model Number: IC35L040AVER07-0
Serial Number: SXPTXTC0135
Firmware Revision: ER4OA44A
Standards:
Used: ATA/ATAPI-5 T13 1321D revision 1
Supported: 5 4 3 2 & some of 6
Configuration:
Logical max current
cylinders 16383 17475
heads 16 15
sectors/track 63 63
--
CHS current addressable sectors: 16513875
LBA user addressable sectors: 80418240
device size with M = 1024*1024: 39266 MBytes
device size with M = 1000*1000: 41174 MBytes (41 GB)
Capabilities:
LBA, IORDY(can be disabled)
bytes avail on r/w long: 40 Queue depth: 32
Standby timer values: spec'd by Standard, no device specific minimum
R/W multiple sector transfer: Max = 16 Current = 0
Advanced power management level: unknown setting (0x0000)
Recommended acoustic management value: 128, current value: 254
DMA: mdma0 mdma1 mdma2 udma0 udma1 *udma2 udma3 udma4 udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=240ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* NOP cmd
* READ BUFFER cmd
* WRITE BUFFER cmd
* Host Protected Area feature set
Release interrupt
* Look-ahead
* Write cache
* Power Management feature set
Security Mode feature set
* SMART feature set
* Device Configuration Overlay feature set
Automatic Acoustic Management feature set
SET MAX security extension
Address Offset Reserved Area Boot
SET FEATURES subcommand required to spinup after power up
Power-Up In Standby feature set
Advanced Power Management feature set
* READ/WRITE DMA QUEUED
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
30min for SECURITY ERASE UNIT.
HW reset results:
CBLID- above Vih
Device num = 1 determined by the jumper
Checksum: correct
Préparer les partitions
En règle général, j’installe toujours Linux sur plusieurs partitions. Voici ma règle de partition :
/dev/hdb1: Partition primaire de 100 MB correspondant à /boot
/dev/hdb2: Partition primaire de 500 MB correspondant à la racine /
/dev/hdb5: Partition étendue de 5000 MB correspondant à /usr
/dev/hdb6: Partition étendue de 5000 MB correspondant à /opt
/dev/hdb7: Partition étendue de 5000 MB correspondant à /var
/dev/hdb8: Partition étendue de 2000 MB correspondant au swap
/dev/hdb9: Partition étendue du reste du disque correspondant à /home
J’ai volontairement choisi des tailles assez grandes car le disque fait quand même 41 GB. Ces tailles peuvent être très différentes avec des disques de capacités inférieures. De même, j’inverse parfois hdb7 et hdb8 pour essayer de placer le swap vers la moitié du disque dur. Pour comparer, voici une règle appliquée à un disque de 4 GB (Pour ceux que cela interesse, il s’agit d’un IBM-DCAA-34330) :
Name Flags Part Type FS Type [Label] Size (MB)
-----------------------------------------------------------------------------------------------------------
hda1 Primary Linux ext3 [/boot] 98,71
hda2 Primary Linux ext3 [/] 501,75
hda5 Logical Linux ReiserFS [/usr] 1497,01
hda6 Logical Linux ReiserFS [/opt] 197,41
hda7 Logical Linux swap / Solaris 501,75
hda8 Logical Linux XFS [/var] 1003,49
hda9 Logical Linux XFS [/home] 534,65
Comme vous pouvez le constater, il existe quand même deux constantes, la taille de /boot et la taille de la raçine / qui font respectivement 100 MB et 500 MB.
Préparez donc la taille de vos partitions, dans mon cas, après être passé par cfdisk, j’ai la structure suivante :
Name Flags Part Type FS Type [Label] Size (MB)
-----------------------------------------------------------------------------------------------------------
hdb1 Boot Primary Linux 100,13
hdb2 Primary Linux 500,10
hdb5 Logical Linux 5004,07
hdb6 Logical Linux 5004,07
hdb7 Logical Linux 5004,07
hdb8 Logical Linux swap / Solaris 2047,87
hdb9 Logical Linux 23513,85
Vérifier les blocks défecteux
Dans notre cas, il n’existe pas encore de système de fichier sur les partitions crées. Je n’ai donc aucun risque à employer badblocks en lecture/écriture sur les partitions. Par ailleurs, j’ai pour principe d’enregistrer dans un fichier la liste des blocs défecteux. La commande pour vérifier les blocs défecteux est donc :
# badblocks -w -o /tmp/badblocks-hdb1 -b 1024 /dev/hdb1
ATTENTION, si vous voulez utiliser badblocks sur des partitions déjà crées, Il ne faut pas utiliser le test en écriture et il faut indiquer la bonne taille de bloc, relative au système de fichier utilisé. Pour reprendre l’exemple précedent, et si la partition /dev/hdb1 est une partition de type ext3, j’utiliserais la commande suivante :
# badblocks -n -o /tmp/badblocks-hdb1 -b 1024 /dev/hdb1
Trouver la taille d’un bloc en fonction du file system
Pour les formats ext2/ext3, c’est la commande dumpe2fs qui nous la donne :
# dumpe2fs /dev/hdb1 | grep -i 'block size'

Pour les formats reiserfs, c’est la commande
debugreiserfs qui nous la donne :
# debugreiserfs /dev/hdb5 | grep -i 'Blocksize'

Pour les formats XFS, c’est la commande
xfs_info qui nous la donne, après que le filesystem ait été monté :
# xfs_info /dev/hdb7
meta-data=/mnt isize=256 agcount=8, agsize=305422 blks
= sectsz=512
data = bsize=2048 blocks=2443376, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
naming =version 2 bsize=4096
log =internal bsize=2048 blocks=5120, version=1
= sectsz=512 sunit=0 blks
realtime =none extsz=65536 blocks=0, rtextents=0
Vider les partitions
J’aime bien mettre tout à zero quand j’initialise une partition, cela permet de re-tester la fiabilité de l’écriture, et d’éffacer tout ce qu’il pouvait s’y trouver auparavant :
# dd if=/dev/zero of=/dev/hdb1 bs=1024k
Formater les partitions
Pour les petites partitions, surtout en ext2 ou ext3, j’aime bien utiliser une taille de bloc de 1024 octets, par contre, pour les systèmes ReiserFS ou XFS, toujours sur de petites partitions, j’aime bien utiliser une taille de bloc de 2048 octets plutôt qu’une taille de 4096 octets (par défaut). En fait, tout cela dépend de ce que l’on va mettre sur ce type de partition. Si c’est pleins de petits fichiers, il vaut mieux ne pas avoir une taille de bloc trop importante. Par contre, si une partition est vouée à reçevoir de gros fichiers, je laisse plutôt 4096 comme taille de bloc, voir même 8k ou plus.
Nous allons maintenant créer les systèmes de fichiers pour chacune des partitions crées :
# mkfs.ext3 -c -j -b 1024 -l /tmp/badblocks-hdb1 /dev/hdb1
mke2fs 1.37 (21-Mar-2005)
étiquette de système de fichiers=
Type de système d'exploitation: Linux
Taille de bloc=1024 (log=0)
Taille de fragment=1024 (log=0)
24480 inodes, 97744 blocs
4887 blocs (5.00%) réservé pour le super usager
Premier bloc de données=1
12 bloc de groupes
8192 blocs par groupe, 8192 fragments par groupe
2040 inodes par groupe
Archive du superbloc stockée sur les blocs:
8193, 24577, 40961, 57345, 73729
Vérification de blocs corrompus (test en mode lecture seulement): complété 744
écriture des tables d'inodes: complété
Création du journal (4096 blocs): complet
écriture des superblocs et de l'information de comptabilité du système de fichiers: complet
Le système de fichiers sera automatiquement vérifié tous les 35 montages ou après
180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i pour écraser la valeur.
# mkfs.ext3 -c -j -b 1024 -l /tmp/badblocks-hdb2 /dev/hdb2
mke2fs 1.37 (21-Mar-2005)
étiquette de système de fichiers=
Type de système d'exploitation: Linux
Taille de bloc=1024 (log=0)
Taille de fragment=1024 (log=0)
122400 inodes, 488376 blocs
24418 blocs (5.00%) réservé pour le super usager
Premier bloc de données=1
60 bloc de groupes
8192 blocs par groupe, 8192 fragments par groupe
2040 inodes par groupe
Archive du superbloc stockée sur les blocs:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Vérification de blocs corrompus (test en mode lecture seulement): complété 376
écriture des tables d'inodes: complété
Création du journal (8192 blocs): complet
écriture des superblocs et de l'information de comptabilité du système de fichiers: complet
Le système de fichiers sera automatiquement vérifié tous les 24 montages ou après
180 jours, selon la première éventualité. Utiliser tune2fs -c ou -i pour écraser la valeur.
# mkfs.reiserfs -b 2048 -B /tmp/badblocks-hdb5 /dev/hdb5
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)
A pair of credits:
Vladimir Demidov wrote the parser for sys_reiser4(), the V3 alpha port, part of
the V3 journal relocation code, and helped Hans keep the business side of
things running.
The Defense Advanced Research Projects Agency (DARPA, www.darpa.mil) is the
primary sponsor of Reiser4. DARPA does not endorse this project; it merely
sponsors it.
Guessing about desired format.. Kernel 2.6.8-3-686 is running.
Format 3.6 with standard journal
Count of blocks on the device: 2443360
Number of blocks consumed by mkreiserfs formatting process: 8377
Blocksize: 2048
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 34)
Journal Max transaction length 512
inode generation number: 0
UUID: e3b50343-03e6-4769-8083-142f26fc2a27
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON '/dev/hdb5'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok
Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.
ReiserFS is successfully created on /dev/hdb5.
# mkfs.reiserfs -b 2048 -B /tmp/badblocks-hdb6 /dev/hdb6
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)
A pair of credits:
Continuing core development of ReiserFS is mostly paid for by Hans Reiser from
money made selling licenses in addition to the GPL to companies who don't want
it known that they use ReiserFS as a foundation for their proprietary product.
And my lawyer asked 'People pay you money for this?'. Yup. Life is good. If you
buy ReiserFS, you can focus on your value add rather than reinventing an entire
FS.
The Defense Advanced Research Projects Agency (DARPA, www.darpa.mil) is the
primary sponsor of Reiser4. DARPA does not endorse this project; it merely
sponsors it.
Guessing about desired format.. Kernel 2.6.8-3-686 is running.
Format 3.6 with standard journal
Count of blocks on the device: 2443360
Number of blocks consumed by mkreiserfs formatting process: 8377
Blocksize: 2048
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 34)
Journal Max transaction length 512
inode generation number: 0
UUID: bc735769-eb31-4b0b-9554-1ddf93ee28bd
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON '/dev/hdb6'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok
Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.
ReiserFS is successfully created on /dev/hdb6.
# mkfs.xfs -b size=2048 /dev/hdb7
meta-data=/dev/hdb7 isize=256 agcount=8, agsize=305422 blks
= sectsz=512
data = bsize=2048 blocks=2443376, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
naming =version 2 bsize=4096
log =internal log bsize=2048 blocks=5120, version=1
= sectsz=512 sunit=0 blks
realtime =none extsz=65536 blocks=0, rtextents=0
# mkswap -c /dev/hdb8
Setting up swapspace version 1, size = 2047832 kB
no label, UUID=6c41bda8-9040-4552-86ed-b04d1618b4f6
# mkfs.xfs -b size=2048 /dev/hdb9
meta-data=/dev/hdb9 isize=256 agcount=16, agsize=717584 blks
= sectsz=512
data = bsize=2048 blocks=11481344, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
naming =version 2 bsize=4096
log =internal log bsize=2048 blocks=5606, version=1
= sectsz=512 sunit=0 blks
realtime =none extsz=65536 blocks=0, rtextents=0
Note : Comme vous pouvez le constater, il n’est pas possible d’indiquer la liste des blocs défecteux lors du formattage en XFS. Donc, si vous avez des blocs défecteux sur la partition XFS, mieux vaut la passer en ReiserFS, ou essayer JFS.
Conclusion
Vous voilà avec un disque prêt à reçevoir Linux, sans passer par des utilitaires tels que partman ou le CD d’installation. Maintenant, dans l’article suivant, nous allons pouvoir copier le contenu du disque de boot sur le disque secondaire que nous venons de préparer.