2017-04-05 2 views
2

J'ai un ancien pool zfs (créé 05-2012) qui fonctionnait sous Debian 7.6 et avait 26Gbytes libres (sur 58Tbytes) comme rapporté par df. Je viens juste de réinstaller l'os (debian 8.7) et maintenant le pool affiche 0 octet libre en df mais 1.04Tbyte "FREE" avec zpool list.ZFS montrant l'espace libre, impossible de supprimer

J'ai 2 questions:

1) Quelle est la différence entre FREE dans la liste zpool (= 1.04Tbytes) et OFFERTS dans la liste zfs (= 0)?

2) Est-ce que je peux faire quelque chose pour utiliser cet espace libre de 1 To? J'ai supprimé tous les instantanés et cela n'a fait aucune différence ...

Merci d'avance.

% df -h /contentA 
Filesystem  Size Used Avail Use% Mounted on 
contentA   58T 58T  0 100% /contentA 

% zpool list contentA 
NAME  SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT 
contentA 65T 64.0T 1.04T  16.0E  - 98% 1.00x ONLINE - 

% zfs list contentA 
NAME  USED AVAIL REFER MOUNTPOINT 
contentA 58.0T  0 58.0T /contentA 

% uname -a 
Linux myserver 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07) x86_64 GNU/Linux 

% cat /etc/debian_version 
8.7 
+0

Avez-vous des instantanés dans le pool? 'zfs list -t all' (laissez le' contentA' car seul le système de fichiers 'contentA' correspond à ce nom et vous ne verrez aucun instantané si vous l'incluez dans la commande - du moins c'est comme ça que' zfs list .. .' se comporte sur ma copie de Solaris 11 ...) –

Répondre

1

De la page man zfs(8), available signifie:

The amount of space available to the dataset and all its children, 
assuming that there is no other activity in the pool. Because space 
is shared within a pool, availability can be limited by any number of 
factors, including physical pool size, quotas, reservations, or other 
datasets within the pool. 

D'une manière générale, le premier endroit pour chercher des différences sont des choses à l'extérieur de ce jeu de données, comme une réserve formulée sur un ensemble de données différent la même piscine.

Toutefois, à partir de votre message, il semble que l'ensemble de données que vous avez exécuté list par rapport à peut être le jeu de données racine pour votre pool, ce qui doit prendre en compte tous les autres sous-jeux de données. Dans certains cas, la configuration de votre pool peut provoquer des différences de ce type, comme indiqué dans le document Oracle docs.

Cependant (encore une fois), ceux-ci appliquent généralement à l'espace qui sera nécessaire pour le stockage de redondance et de métadonnées dans le cas où votre agrandit la taille des données logiques (c.-à-pools mis en miroir montrent la moitié autant available espace free espace, puisque chaque octet vous écrire dans l'ensemble de données doit être copié à deux endroits). Comme le available de votre ensemble de données est égal à zéro, il est évident que cela ne tient pas compte uniquement de la charge prédite des écritures futures.

Cela m'amène à l'explication finale. ZFS dispose d'un mécanisme de sécurité intégré dans sa comptabilité d'espace pour empêcher les utilisateurs de remplir une piscine au-delà de 63/64 (ce qui me semble incroyablement proche des proportions dans votre cas, et donc certainement la limite que vous devez atteindre). Parce que ZFS requiert toujours un nouvel espace pour modifier l'état sur disque (à cause de la copie sur écriture), si vous dépassiez cette limite, il est possible que le pool ne puisse plus supprimer des éléments pour libérer de l'espace pour de nouvelles écritures. , le faisant devenir en lecture seule - définitivement. Bien qu'il soit possible de corriger ZFS ou de changer un accordable pour contourner la limite, je ne le recommanderais pas!

+0

Avez-vous un lien vers cette chose 63/64? Cela semble intéressant. – user121391

+1

@ user121391 Je ne sais pas si c'est dans la documentation, mais les limites sont définies ici dans le code (pour ZFS sous Linux): https://github.com/zfsonlinux/zfs/blob/master/include/sys /dsl_synctask.h – Dan

+1

@Dan Il en est de même dans la source OpenSolaris sur Illumos.org: http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/fs/zfs/sys /dsl_synctask.h Donc, c'est probablement la même chose dans toutes les implémentations de ZFS. –