Muestra el espacio libre del sistema de archivos disponible para el usuario root


12

Por defecto, Linux reserva una fracción de un sistema de archivos para el usuario root, al menos en ext4 (para evitar que los usuarios comunes llenen el disco por completo y bloqueen el sistema, y ​​para reducir la fragmentación). Sin embargo, dfsolo muestra el espacio libre aparente para los usuarios normales (incluso cuando se ejecuta como root). ¿Cómo se muestra el espacio libre "real", que sería accesible desde la raíz?

Respuestas:


6

No estoy seguro de que haya una herramienta incorporada, pero suponiendo que haya dejado la reserva en el 5% predeterminado, esto le dirá:

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

dfla raíz, greppara la línea con dev (para eliminar el encabezado), cutel tamaño y los campos disponibles, luego use un awkscript para calcular el 5% del tamaño del disco agregado a los disponibles.

Puede extraer la reserva real de tune2fs -l <device>y combinar esto con lo anterior en un script.


2
Derecho, por lo que el siguiente comando nos dirá qué cantidad de espacio de partición está reservada a usuarios privilegiada localización: tune2fs -l /dev/DEVICE | egrep "Block count|Reserved block count". Por ejemplo, para mi partición "buffer multimedia": Block count: 2621440y Reserved block count: 128449: 4.9% de los bloques disponibles (configuración conservadora para ayudar a prevenir la fragmentación).
tuk0z

No es necesario usar el cutcomando: puede seleccionar los campos awkdirectamente. De hecho, el cutcomando no funcionó para mí como se esperaba. De todos modos, di otra respuesta que debería dar una respuesta más precisa.
jarno

1
Ejecute tune2fs -m <percentage> <device-name>para cambiar el espacio en disco reservado solo para uso raíz.
luka5z

1
Inspirado por lo anterior, se me ocurrió esto para calcular el espacio reservado en el volumen raíz en MB: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

Esta no es una respuesta portátil. Consulte a continuación la respuesta que necesita (spoiler: tune2fs /dev/sda1o incluso mejorstat -f -c '%a blocks free and %f blocks free for root (%S bytes per block)' /
trs

17

Al usar el comando tune2fs (que se encuentra en / sbin / tune2fs ), puede determinar fácilmente el espacio reservado : (¡y más!)

tune2fs -l /dev/sda1

Proporcionaré la información de mi sistema como referencia, voy a eliminar líneas extrañas que no son importantes para esta pregunta:

El encabezado ... y el nombre del volumen, etiqueto todas mis unidades, las hace fáciles de identificar si es necesario.

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

REALMENTE quiero que esto diga "limpio" mientras el sistema se está ejecutando. ¡Honesto!

Filesystem state:         clean

Aquí es donde comienza la información de capacidad de almacenamiento de datos:

Aquí puede ver que tengo 121,179,648 bloques en total ... con un tamaño de bloque de 4K (4096), que se multiplica a un gran número (462-ish GB). (El tamaño del bloque se indica a continuación)

Block count:              121179648

Y los bloques reservados ... mirando el número de arriba y el número de abajo ... deberías ser capaz de descubrir relativamente rápido que tengo un 1% reservado. En este caso (4.62-ish GB)

Reserved block count:     1211796

¿Cuánto espacio libre disponible actualmente? ¡Aquí mismo!

Free blocks:              104090586
...

Y el tamaño de bloque más importante. Útil para multiplicar.

Block size:               4096
...

Estas líneas dicen QUIEN los bloques están reservados para ... usuario 0, raíz, en este caso

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

Hay mucha más información disponible aquí, pero esto debería darle la capacidad de determinar rápidamente cuánto está disponible y cuánto más está reservado para root. Matemáticas simples

Espero que esto ayude. Recuerda ... las páginas de manual son tus amigos.


2

Esto muestra el espacio libre en bytes en la partición relacionada con "/ ruta"

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

No es necesario ser superusuario para ejecutarlo.

Por cierto, no entiendo cuál es la diferencia entre

Tamaño del bloque% s (para transferencias más rápidas)

% S tamaño de bloque fundamental (para recuentos de bloques)

en uso de stat.


Genial: ¿esto representa el espacio reservado para root?
Paul

@Paul sí, está incluido
jarno

Su salida es efectivamente una suma, por lo que puede canalizar la salida bcpara obtener el recuento de bytes, o incluso usar --format='%f*%S/1024/1024/1024' | bcpara obtener kilobytes / megabytes / gigabytes dependiendo de cuántas divisiones elija.
Paul

@ Paul Bueno, yo lo llamaría un producto. Los prefijos binarios se llaman kibibytes, mebibytes y gibibytes, respectivamente. La expansión aritmética circundante $(( ... ))hace el cálculo, pero resulta solo la parte entera del cociente (si agrega división). ¿O quiere decir que su caparazón no admite la expansión aritmética?
jarno

@Paul Pero, si lo usa bc, en su lugar, podría obtener el cociente con precisión arbitraria, si lo necesita.
jarno
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.