Afficher l'espace libre du système de fichiers disponible pour l'utilisateur root

12

Par défaut, Linux réserve une partie d'un système de fichiers à l'utilisateur root, au moins sur ext4 (pour empêcher les utilisateurs ordinaires de remplir complètement le lecteur et de planter le système, et de réduire la fragmentation). Cependant, dfaffiche uniquement l'espace libre apparent pour les utilisateurs réguliers (même lorsqu'il est exécuté en tant que root). Comment affichez-vous l'espace "réel" libre, qui serait accessible à root?

Escargot mécanique
la source

Réponses:

6

Je ne suis pas sûr qu'il y ait un outil intégré, mais en supposant que vous ayez laissé le réservé à la valeur par défaut de 5%, cela vous dira:

df / | grep dev | cut -f 3,6 -d\  | awk '{print ($1*.05)+$2}'

dfla racine, greppour la ligne avec dev dedans (pour supprimer l'en-tête), cutla taille et les champs disponibles, puis utilisez un awkscript pour calculer 5% de la taille du disque ajoutée au disponible.

Vous pouvez extraire la réservation réelle tune2fs -l <device>et la combiner avec ce qui précède dans un script.

Paul
la source
2
Bon, alors la commande suivante nous dira à quel point de l'espace de partition est réservée aux utilisateurs privilegiees: tune2fs -l /dev/DEVICE | egrep "Block count|Reserved block count". Par exemple pour ma partition "buffer multimédia": Block count: 2621440et Reserved block count: 128449: 4,9% des blocs disponibles (réglage conservateur pour éviter la fragmentation).
tuk0z
Il n'est pas nécessaire d'utiliser la cutcommande: vous pouvez awkdirectement sélectionner les champs . En fait, la cutcommande n'a pas fonctionné pour moi comme prévu. Quoi qu'il en soit, j'ai donné une autre réponse qui devrait donner une réponse plus précise.
jarno du
1
Exécutez tune2fs -m <percentage> <device-name>pour modifier l'espace disque réservé à un usage root uniquement.
luka5z
1
Inspiré par ce qui précède, j'ai trouvé ceci pour calculer l'espace réservé sur le volume racine en Mo:sudo tune2fs -l $(df | grep -E '/$' | cut -d\ -f 1) | egrep "Reserved block count|Block size" | paste -sd\ | awk '{print ($4 * $7 / ( 1024 * 1024 ) ), "MB"}'
mp3foley
Ce n'est pas une réponse portable. Cochez ci-dessous pour la réponse dont vous avez besoin (spoiler: tune2fs /dev/sda1ou mieux encorestat -f -c '%a blocks free and %f blocks free for root (%S bytes per block)' /
très
17

En utilisant la commande tune2fs (trouvée dans / sbin / tune2fs ), vous pouvez facilement déterminer l' espace réservé : (et plus!)

tune2fs -l /dev/sda1

Je vais fournir les informations de mon système pour référence, je vais supprimer les lignes superflues non importantes pour cette question:

L'en-tête ... et le nom du volume, j'étiquette tous mes disques, les rend faciles à identifier si nécessaire.

tune2fs 1.42.4 (12-Jun-2012)
Filesystem volume name:   xenon
Last mounted on:          /
...

VRAIMENT vouloir que cela dise "propre" pendant que le système fonctionne. Honnête!

Filesystem state:         clean

C'est là que commencent les informations sur la capacité de stockage des données:

Ici, vous pouvez voir que j'ai 121 179 648 blocs au total ... avec une taille de bloc de 4K (4096), qui se multiplie en un grand nombre (462 Go). (La taille des blocs est indiquée ci-dessous)

Block count:              121179648

Et les blocs réservés ... en regardant le nombre ci-dessus, et le nombre ci-dessous ... vous devriez être en mesure de comprendre relativement rapidement que j'ai réservé 1%. Dans ce cas (4,62 Go)

Reserved block count:     1211796

Combien d'espace libre actuellement disponible? Ici!

Free blocks:              104090586
...

Et la taille de bloc la plus importante. Utile pour se multiplier.

Block size:               4096
...

Ces lignes indiquent QUI les blocs sont réservés à ... l'utilisateur 0, root, dans ce cas

Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
...

Il y a beaucoup plus d'informations disponibles ici, mais cela devrait vous donner la possibilité de déterminer rapidement combien est disponible et combien plus est réservé pour root. Mathématiques simples.

J'espère que cela t'aides. N'oubliez pas que les pages de manuel sont vos amis.

lornix
la source
2

Ceci affiche l'espace libre en octets dans la partition liée à "/ chemin"

printf '%s' $(($(stat -f --format='%f*%S' /path)))

Vous n'avez pas besoin d'être superutilisateur pour l'exécuter.

BTW je ne comprends pas très bien quelle est la différence entre

Taille du bloc% s (pour des transferts plus rapides)

Taille de bloc fondamentale% S (pour le nombre de blocs)

dans l'utilisation de stat.

jarno
la source
Cool - cela représente-t-il l'espace réservé à root?
Paul
@Paul oui, il est inclus
jarno
Votre sortie est en fait une somme - vous pouvez donc diriger la sortie vers bcpour obtenir le nombre d'octets, ou même l'utiliser --format='%f*%S/1024/1024/1024' | bcpour obtenir des kilo-octets / mégaoctets / gigaoctets selon le nombre de divisions que vous choisissez.
Paul
@ Paul Eh bien, je l'appellerais un produit. Les préfixes binaires sont appelés kibibytes, mebibytes et gibibytes, respectivement. L' expansion arithmétique environnante $(( ... ))fait le calcul, mais elle ne produit que la partie entière du quotient (si vous ajoutez une division). Ou voulez-vous dire que votre shell ne prend pas en charge l'expansion arithmétique?
jarno
@Paul Mais, si vous utilisez à la bcplace, vous pourriez obtenir le quotient avec une précision arbitraire, si vous en avez besoin.
jarno