Bonjour,
Après la création d’une partition avec cfdisk, je ne retrouve jamais le périphérique associé dans /dev avant d’avoir rebooter la machine.
Existe-il une commande pour aligner les périphériques /dev/sda* avec les partitions du disque sda ?
Bonjour,
Après la création d’une partition avec cfdisk, je ne retrouve jamais le périphérique associé dans /dev avant d’avoir rebooter la machine.
Existe-il une commande pour aligner les périphériques /dev/sda* avec les partitions du disque sda ?
$ man cfdisk
W Write partition table to disk (must enter an upper case W). Since this might destroy data on
the disk, you must either confirm or deny the write by entering `yes' or `no'. If you enter
`yes', cfdisk will write the partition table to disk and the tell the kernel to re-read the
partition table from the disk. The re-reading of the partition table does not work in some
cases, for example for device-mapper devices. In particular case you need to inform kernel
about new partitions by partprobe(8), kpartx(8) or reboot the system.
Le manuel de cfdisk mentionne la possibilité d’user de partprobe et kpartx.
Toutefois, il n’est pas garanti que la nouvelle table des partitions soit correctement détectée. Seul le redémarrage le garantit à coup sûr.
[quote]
For example, if you were using cfdisk to make a DOS partition table entry for
/dev/hda1, then (after exiting fdisk or cfdisk and rebooting Linux so that the partition table infor‐
mation is valid ) you would use the command “dd if=/dev/zero of=/dev/hda1 bs=512 count=1” to zero the
first 512 bytes of the partition [/quote]
$ cat /proc/partitions
Edit : correction “ilS n’est pas garanti” -> Il n’est pas garanti
Merci, j’avais cherché du coté de mknod mais pas du coté de cfdisk.
J’essayerai partprobe qui semble convenir la prochaine fois.
Inutile de créer le fichier spécial /dev/sdXY à la main avec mknod après ajout d’une nouvelle partition car tant que le noyau n’a pas rechargé la table de partition, le périphérique bloc correspondant n’est pas créé.
A ma connaissance le noyau refuse de recharger la table de partition d’un disque si au moins une partition de ce disque est en cours d’utilisation (système de fichiers monté, RAID logiciel assemblé, swap activé…) pour des raisons de cohérence. Je ne vois pas comment partprobe pourrait déroger à la règle. Je n’ai pas le moyen de vérifier dans l’immédiat, mais je suis intéressé.
Si le démontage de toutes les partitions de ce disque (ex: la racine) ou le redémarrage sont exclus, on peut éventuellement utiliser kpartx pour créer un périphérique bloc pour la nouvelle partition via le device mapper (ou directement le device mapper via dmsetup avec la position et la taille de la partition), sans recharger la table de partition.
Je ne vois pas ce qui empêcherait le système de relire la table, qu’il y ait ou non une partition en service, cela devrait se faire automatiquement, et c’est le cas pour toute partition créee avec parted.
Au besoin utiliser partprobe qui a d’ailleurs une option -d pour ne pas renseigner le noyau si nécessaire.
Problème avec udev ?
La cohérence, tout simplement. Quid si une partition en cours d’utilisation a par exemple été renommée (suite à l’insertion ou à la suppression d’une partition avant elle) ou supprimée ?
La fonction de partprobe est de demander au noyau de mettre à jour s liste des partitions et cette option -d l’en empêche. Je ne comprends pas ce que fait partprobe avec cette option…
Quant à udev, il ne crée pas de périphériques mais seulement les fichiers spéciaux, suite à notification du noyau.
et bien tu pourras faire des tests pour vérifier cela.
En ce qui me concerne pas de problème de reconnaissance de nouvelles partitions sur x tables.
L’extrait du manuel de cfdisk précédemment cité est contemporain (debian squeeze). En sus du redémarrage, il propose deux issues, partprobe et kpartx.
Par curiosité, j’ai regardé ce qu’en disait l’ancien manuel de cfdisk du temps de etch/lenny.
L’ancien manuel de cfdisk ne prévoyait qu’une issue en cas de mauvaise détection : le redémarrage.
$ man /lenny/usr/share/man/man8/cfdisk.8.gz
W Write partition table to disk (must enter an upper case W). Since this might
destroy data on the disk, you must either confirm or deny the write by entering
`yes' or `no'. If you enter `yes', cfdisk will write the partition table to disk
and the tell the kernel to re-read the partition table from the disk. The re-read‐
ing of the partition table works in most cases, but I have seen it fail. Don't
panic. It will be correct after you reboot the system. In all cases, I still rec‐
ommend rebooting the system -- just to be safe.
…
“La relecture de la table des partitions fonctionne la plupart du temps, mais je l’ai déjà vue échouer.
Ne paniquez pas. Elle sera correcte après le redémarrage de votre système. En tous les cas, je recommande de redémarrer le système – par acquit de conscience”.
root@ks23682:~/bin/install# ll /dev/sda*
brw-rw---T 1 root disk 8, 0 mars 28 09:42 /dev/sda
brw-rw---T 1 root disk 8, 1 mars 28 08:59 /dev/sda1
brw-rw---T 1 root disk 8, 2 mars 28 08:59 /dev/sda2
root@ks23682:~/bin/install# partprobe
root@ks23682:~/bin/install# ll /dev/sda*
brw-rw---T 1 root disk 8, 0 mars 28 09:44 /dev/sda
brw-rw---T 1 root disk 8, 1 mars 28 08:59 /dev/sda1
brw-rw---T 1 root disk 8, 2 mars 28 08:59 /dev/sda2
brw-rw---T 1 root disk 8, 3 mars 28 09:44 /dev/sda3
partprobe remplace donc bien le reboot
J’ai testé, et effectivement partprobe peut faire reconnaître l’ajout ou la suppression d’une partition alors même que d’autres partitions du disque sont en cours d’utilisation. Idem avec parted et les versions GNU de fdisk, cfdisk… qui sont aussi basées sur libparted.
Ce n’est pas le cas des fdisk et cfdisk standard, ni de hdparm -z ou blockdev --rereadpt qui échouent si une partition est en cours d’utilisation.
J’ai cherché d’où venait la différence, et voici ce que j’ai trouvé :
Les outils ©fdisk standard, hdparm et blockdev utilisent l’ioctl (appel système du noyau) BLKRRPART, qui demande au noyau de recharger la table de partition entière du disque. Comme je l’avais écrit, cette commande échoue si une partition est en cours d’utilisation.
Les outils basés sur libparted (parted, partprobe, GNU fdisk…) utilisent l’ioctl BLKPG qui permet d’informer le noyau de l’ajout ou de la suppression d’une partition sans recharger la table de partition du disque. Il faut fournir tous les paramètres relatifs à cette partition (position, taille, nom…) puisque le noyau ne relit pas la table de partition sur le disque.
J’aurais donc appris quelque chose, merci.