Est-il possible de changer la taille de secteur d'une partition pour le pool zfs raidz sous Linux?

9

J'ai migré un pool zfs raidz sous Linux vers de nouveaux disques via des périphériques virtuels qui étaient des fichiers épars. J'ai utilisé des partitions sur les disques car les disques sont de tailles différentes de 1,9T chacun. Le dernier disque à ajouter est un disque de 4 To et je l'ai partitionné comme les autres avec une partition de 1,9 To à ajouter au pool. Il utilise une table de partition GPT. Lorsque j'essaie de remplacer le dernier fichier par la partition 1.9T sur le disque 4T, j'obtiens ce qui suit

zpool replace -f zfs_raid /zfs_jbod/zfs_raid/zfs.2 /dev/sdd1 
cannot replace /zfs_jbod/zfs_raid/zfs.2 with /dev/sdd1: devices have different sector alignment

Comment puis-je changer la taille du secteur de partition à 512 comme les autres, ou à défaut, est-il possible de changer les autres périphériques de pool en 4024? Apparemment, les tailles de secteurs logiques sont toutes 512

cat /sys/block/sdd/queue/hw_sector_size
Disk /dev/sdd: 4000.8 GB, 4000787030016 bytes, 7814037168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Comme j'ai repartitionné le disque qui contenait le 4ème périphérique basé sur le fichier d'origine que j'essaie de remplacer mais cela n'a pas fonctionné, j'ai recréé le fichier du périphérique donc il est en train de le resilver.

sortie d'état zpool:

NAME                            STATE     READ WRITE CKSUM
zfs_raid                        DEGRADED     0     0     0
  raidz1-0                      DEGRADED     0     0     0
    sda3                        ONLINE       0     0     0
    sdc2                        ONLINE       0     0     0
    sdb1                        ONLINE       0     0     0
    replacing-3                 OFFLINE      0     0     0
      /zfs_jbod/zfs_raid/zfs.2  OFFLINE      0     0     0
      /mnt/butter2/zfs.4        ONLINE       0     0     0  (resilvering)
barrymac
la source
Ne pouvez-vous pas faire à la place zfs attach zfs_raid <file> <device> et après la synchronisation zfs detach zfs_raid <file>
BitsOfNix
la connexion d'un 5ème appareil n'allongerait-elle pas la baie de manière irréversible? ou peut-être voulez-vous dire quelque chose comme l'ajout d'une pièce de rechange?
barrymac
Ne pas ajouter de disque de rechange ou ajouter un nouveau disque, en faisant zpool attach pool old_device new_device, cela mettra en miroir l'ancien_device vers le new_device, puis vous détacherez l'ancien_device de votre miroir après la resilver: docs.oracle.com/cd/E26502_01/html/E29007/ gayrd.html # scrolltoc <- informations sur l'attachement / détachement et les différences entre l'ajout et l'attachement.
BitsOfNix
Cela a semblé prometteur en renvoyant malheureusement un «ne peut pas attacher / dev / sdd1 à /zfs_jbod/zfs_raid/zfs.2: ne peut être attaché qu'aux miroirs et aux disques de niveau supérieur»
barrymac
Pourriez-vous mettre votre sortie zfs_raid de statut zpool actuel pour voir la disposition du raid?
BitsOfNix

Réponses:

4

J'ai trouvé l'option nécessaire! le pool est en train de réargenter la nouvelle partition après avoir exécuté la commande suivante:

 zpool replace  -o ashift=9 zfs_raid <virtual device> /dev/sdd1

Bien que cela soit possible, ce n'est pas conseillé car vous obtenez des performances terribles en forçant un lecteur de type 4k à être écrit en 512b. J'ai appris à la dure qu'il fallait ajouter

-o ashift=12 

lors de la création du pool pour éviter d'avoir à le recréer ultérieurement car il n'est actuellement pas possible de «migrer» vers la taille du secteur 4k.

barrymac
la source