Pregunta Cómo borrar el espacio libre en disco en Linux?


Cuando se elimina un archivo, su contenido puede quedar en el sistema de archivos, a menos que se sobrescriba explícitamente con otra cosa. los wipe comando puede borrar archivos de forma segura, pero no parece permitir el borrado de espacio libre en el disco no utilizado por ningún archivo.

¿Qué debería usar para lograr esto?


130


origen


La única solución segura puede ser guardar sus archivos en otro lugar, borrar toda la partición, volver a crear el sistema de archivos y luego restaurar sus archivos. Corrí photorec y se sorprendió por la cantidad de cosas que se podían recuperar incluso después de 'limpiar' el espacio libre. Una solución de compromiso es mover el límite izquierdo de su partición en un 6% de su tamaño después de haber borrado el espacio aparentemente libre. - user39559


Respuestas:


Advertencia: El disco moderno / hardware SSD y los sistemas de archivos modernos pueden arrancar datos en lugares donde no puede eliminarlos, por lo que este proceso aún puede dejar datos en el disco. Las únicas formas seguras de borrar datos son el comando ATA Secure Erase (si se implementa correctamente) o la destrucción física. Ver también ¿Cómo puedo borrar de manera confiable toda la información en un disco duro?


99



Es difícil localizar la página de inicio actual "oficial" de eliminación segura. Una versión quizás más antigua afirma que no hay informes de fallas, pero al mismo tiempo no hay un sistema abierto de seguimiento de errores donde podría informar un error que he encontrado. La página de inicio de eliminación segura también señala que puede no Limpie todos los bloques de datos no utilizados, según el sistema de archivos que use, que es cierto. - user39559
Con los discos duros modernos (más grandes que alrededor de 20 GB), es totalmente inútil hacer varios pases y esperar por años. Por lo tanto, la instalación de herramientas especializadas también se ha vuelto inútil (lo que puede explicar por qué secure-delete no tiene más página de inicio). Solo haz esto desde la partición apropiada: cat /dev/zero >nosuchfile; rm nosuchfile. - mivk
@mivk: ¿Por qué es inútil hacer más de un pase? ¿Y por qué usar / dev / zero en lugar de / dev / random? ¿Es eso debido a preocupaciones de velocidad? - naught101
Usar / dev / zero es mucho más rápido. Si escribe espacio libre desde / dev / random, el núcleo tiene que generar todos los datos aleatorios sobre la marcha. Es una forma entretenida de ver tu promedio de carga saltar al máximo ... - dafydd
La pregunta de si son necesarias varias toallitas se responde aquí: ¿Por qué escribir cero (o datos aleatorios) en un disco duro varias veces mejor que hacerlo solo una vez? - sleske


La manera más rápida, si solo necesita una sola pasada y solo quiere reemplazar todo con ceros, es:

cat /dev/zero > zero.file
sync
rm zero.file

(ejecutar desde un directorio en el sistema de archivos que desea borrar)
(el sync comando es una medida de paranoia que asegura que todos los datos se escriben en el disco; un administrador de caché inteligente podría resolver que puede cancelar escrituras para cualquier bloque pendiente cuando el archivo está desvinculado)

Habrá un momento durante esta operación en el que no habrá espacio libre en el sistema de archivos, que puede durar decenas de segundos si el archivo resultante es grande y está fragmentado, por lo que tarda un tiempo en eliminarse. Para reducir el tiempo cuando el espacio libre es completamente cero:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
cat /dev/zero > zero.file
sync
rm zero.small.file
rm zero.file

Esto debería ser suficiente para evitar que alguien lea el contenido del archivo antiguo sin una costosa operación forense. Para una variante ligeramente más segura, pero más lenta, reemplace /dev/zero con /dev/urandom. Para más paranoia ejecuta varios pasos con /dev/urandom, aunque si necesita tanto esfuerzo, shred la utilidad del paquete coreutils es el camino a seguir:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
shred -z zero.small.file
cat /dev/zero > zero.file
sync
rm zero.small.file
shred -z zero.file
sync
rm zero.file

Tenga en cuenta que en el ejemplo anterior, el archivo pequeño se tritura antes de crear el más grande, por lo que se puede eliminar tan pronto como se complete, en lugar de tener que esperar a que se triture dejando el sistema de archivos sin espacio libre durante el tiempo que tarde. El proceso de trituración con toma una largo pasar el tiempo sobre un archivo grande y, a menos que intente ocultar algo de la NSA, no es realmente necesario.

Todo lo anterior debería funcionar en cualquier sistema de archivos.

Límites de tamaño de archivo:

Como señala DanMoulding en un comentario a continuación, esto puede tener problemas con el tamaño del archivo limis en algunos sistemas de archivos.

Para FAT32 lo haría seguro ser una preocupación debido al límite del archivo 2GiB: la mayoría de los volúmenes son más grandes que esto actualmente (8TiB es el límite de tamaño de volumen IIRC). Puede solucionar esto conectando el gran cat /dev/zero salida de salida a través split para generar múltiples archivos más pequeños y ajustar las etapas trituradas y eliminar en consecuencia.

Con ext2 / 3/4 es menos preocupante: con el bloque 4K predeterminado / común, el límite de tamaño de archivo es 2TiB, por lo que debe tener una enorme volumen para que esto sea un problema (el tamaño de volumen máximo en estas condiciones es 16TiB).

Con los btrfs (aún experimentales), tanto el tamaño máximo de archivo como el de volumen son 16EiB masivos.

En NTFS, la longitud máxima del archivo es mayor que la longitud máxima del volumen, en algunos casos, incluso.

Puntos de partida para más información:
http://en.wikipedia.org/wiki/Ext3#Size_limits
http://en.wikipedia.org/wiki/Btrfs
http://en.wikipedia.org/wiki/Ntfs#Scalability

Dispositivos virtuales

Como se mencionó recientemente en los comentarios, hay consideraciones adicionales para los dispositivos virtuales:

  • Para discos virtuales escasamente asignados, otros métodos como los utilizados por zerofree será más rápido (aunque a diferencia cat y dd esta no es una herramienta estándar en la que pueda confiar si está disponible en casi cualquier sistema operativo unix-a-like).

  • Tenga en cuenta que poner a cero un bloque en un dispositivo virtual disperso no puede borrar el bloque en el subyacente físico dispositivo, de hecho, iría tan lejos como para decir que es poco probable que el administrador de disco virtual simplemente haga que el bloque ya no se use para que pueda asignarse a otra cosa más adelante.

  • Incluso para dispositivos virtuales de tamaño fijo, es posible que no tenga control sobre dónde vive físicamente el dispositivo para que pueda moverse alrededor de su ubicación actual o sobre un nuevo conjunto de discos físicos en cualquier momento y lo máximo que puede limpiar es la ubicación actual, no cualquier ubicación previa en la que el bloque haya residido en el pasado.

  • Para los problemas anteriores en dispositivos virtuales: a menos que controle los hosts y pueda hacer un borrado seguro de su espacio no asignado luego de limpiar los discos en la VM o mover el dispositivo virtual, no hay nada que pueda hacer después de la hecho. El único recurso es usar el cifrado de disco completo desde el comienzo entonces, nada de nada descifrado está escrito en los medios físicos en primer lugar. Todavía puede haber una solicitud de borrado de espacio libre dentro de la VM, por supuesto. Tenga en cuenta también que FDE puede hacer que los dispositivos virtuales dispersos sean mucho menos útiles ya que la capa de virtualización realmente no puede ver qué bloques no se utilizan. Si la capa del sistema de archivos del sistema operativo envía comandos de recorte al dispositivo virtual (como si fuera un disco SSD), y el controlador virtual los interpreta, eso puede resolverlo, pero no sé de ninguna circunstancia en la que esto ocurra realmente y una mayor la discusión de eso es un asunto para otro lado (ya nos estamos acercando a estar fuera del tema para la pregunta original, por lo que si esto ha despertado su interés algunas preguntas de experimentación y / o seguimiento pueden estar en orden).


65



La puesta a cero simple aparentemente también se puede hacer con el secure-delete herramientas: utilizando sfill -llz reduce todo el procedimiento a una pasada que solo escribe '0'. - foraidt
Esto lleva un tiempo. ¿Es realmente la manera más rápida? Supongo que escribir GB de datos siempre llevará un tiempo ... - endolith
@endolith: si quiere dejar en blanco el espacio libre en un sistema de archivos activo, entonces no puede evitar la necesidad de escribir esa cantidad de datos a través del sistema de archivos. Las herramientas de eliminación segura sugeridas por fnord_ix pueden ser más rápidas, porque están optimizadas para este tipo de tarea. - David Spillett
@endolith: a partir de la descripción en la página man espero que la variante de zerofree sea más rápida para los discos virtuales escasamente asignados, de hecho podría ser más lenta en los virtuales o en los de tamaño fijo si está haciendo una lectura previa a la escritura para confirmar que el bloque no tiene contenido. La expansión de un disco virtual no debería ocurrir ya que la mayoría de los controladores de disco dispersos toman ceros a la izquierda como "no asignar este bloque". También, cat y dd están disponibles en casi cualquier sistema operativo unix-a-like, ya que se consideran herramientas estándar donde zerofree probablemente no lo sea a menos que se haya agregado explícitamente. - David Spillett
@endolith: habiendo dicho lo anterior, zerofree Ciertamente funcionaría, por supuesto, el "sistema completo de archivos temporalmente lleno" mencionado en la página del manual (casi, pero no del todo mitigado por el pequeño error de jiggery pokery en mis ejemplos) es una preocupación genuina Si lo estás haciendo en un sistema actualmente activo, y zerofree de hecho sería más rápido en la instancia específica para la que está optimizado: dispositivos de bloques virtuales escasamente asignados. Aunque no puede confiar en ningún tipo de borrado en un dispositivo virtual por razones de seguridad: la única respuesta verdadera en ese caso es encriptar todo el dispositivo desde el principio. - David Spillett


ADVERTENCIA

Me sorprendió la cantidad de archivos photorec podría recuperar de mi disco, incluso después de limpiar.

Si hay más seguridad en llenar el "espacio libre" solo una vez con 0x00 o 38 veces con diferentes estándares cabalísticos es más una discusión académica. El autor del documento seminal de 1996 sobre trituración se escribió a sí mismo epílogo diciendo que esto es obsoleto e innecesario para el hardware moderno. No hay ningún caso documentado de datos que sean físicamente reemplazados ceros y recuperados después.

La verdad enlace frágil en este procedimiento es el sistema de archivos. Algunos sistemas de archivos reservan espacio para uso especial y no está disponible como "espacio libre". Pero tus datos pueden estar ahí. Eso incluye fotos, correos electrónicos personales de texto plano, lo que sea. Acabo de googlear reservado + espacio + ext4 y aprendí que el 5% de mi home la partición fue reservada. Creo que aquí es donde photorec encontrado tanto de mis cosas. Conclusión: el método de trituración no es el más importante, incluso el método de varios pasos aún deja datos en su lugar.

Puedes probar # tune2fs -m 0 /dev/sdn0 antes de montarlo (Si esta será la partición raíz después de reiniciar, asegúrese de ejecutar -m 5 o -m 1 después de desmontarlo).

Pero aún así, de una manera u otra, puede quedar algo de espacio.

La única forma verdaderamente segura es borrar toda la partición, crear un sistema de archivos nuevamente y luego restaurar los archivos desde una copia de seguridad.


Camino rápido (recomendado)

Ejecutar desde un directorio en el sistema de archivos que desea borrar:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file

Notas: el propósito del archivo pequeño es reducir el tiempo cuando el espacio libre es completamente cero; el propósito de la sincronización es asegurarse de que los datos estén realmente escritos.

Esto debería ser lo suficientemente bueno para la mayoría de las personas.

Camino lento (paranoico)

No hay casos documentados de recuperación de datos después de la limpieza anterior. Sería costoso y exigiría recursos, si fuera posible.

Sin embargo, si tiene una razón para pensar que las agencias secretas gastarían muchos recursos para recuperar sus archivos, esto debería ser suficiente:

dd if=/dev/urandom of=random.small.file bs=1024 count=102400
dd if=/dev/urandom of=random.file bs=1024
sync ; sleep 60 ; sync
rm random.small.file
rm random.file

Lleva mucho más tiempo.

Advertencia. Si has elegido la forma paranoica, después de esto, aún querrás hacer la limpieza rápida, y eso no es paranoia. La presencia de datos puramente aleatorios es fácil y barata de detectar, y despierta la sospecha de que en realidad se trata de datos encriptados. Puede morir bajo tortura por no revelar la clave de descifrado.

Manera muy lenta (paranoico loco)

Incluso el autor del documento seminal de 1996 sobre trituración escribió un epílogo que decía que esto es obsoleto e innecesario para el hardware moderno.

Pero si todavía tiene mucho tiempo libre y no le importa perder su disco con sobrescribir demasiado, ahí va:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
sync ; sleep 60 ; sync
shred -z zero.small.file
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
shred -z zero.file
sync ; sleep 60 ; sync
rm zero.file

Nota: esto es esencialmente equivalente a usar la herramienta de eliminación segura.


Antes de la edición, esta publicación fue una reescritura de David Spillett. El comando "cat" produce un mensaje de error, pero no puedo escribir comentarios en las publicaciones de otras personas.


39



Puedes comentar debajo de las publicaciones de otras personas con 50 reputación. - Gnoupi
los cat Se espera que el comando muestre un error de "no queda espacio" en mis ejemplos, al final de su ejecución. Puede ocultar esto redireccionando stderr a /dev/null si es un problema Usualmente uso pv más bien que cat o dd para este tipo de cosas, para obtener la indicación de progreso útil. - David Spillett
...raises the suspicion that it is actually encrypted data. You may die under torture for not revealing the decryption key. Je, eso es exactamente lo que estaba pensando. Supongo que eso significa que soy paranoico ... - Navin
/: write failed, filesystem is full en FreeBSD - Alex G
Root siempre puede usar el espacio reservado. Entonces, si haces tu relleno cero como root, también podrás llenar el espacio reservado del 5%; el tunefs es innecesario. Todavía es concebible que pueda haber datos en otras partes del sistema de archivos. - Nate Eldredge


Hay una utilidad zerofree al menos en Ubuntu:

http://manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html

   zerofree — zero free blocks from ext2/3 file-systems

   zerofree  finds  the  unallocated, non-zeroed blocks in an ext2 or ext3
   filesystem (e.g. /dev/hda1) and fills them with zeroes. This is  useful
   if  the  device  on  which this file-system resides is a disk image. In
   this case, depending on the type of disk image, a secondary utility may
   be  able  to  reduce the size of the disk image after zerofree has been
   run.

   The usual way to achieve  the  same  result  (zeroing  the  unallocated
   blocks)  is to run dd (1) to create a file full of zeroes that takes up
   the entire free space on the drive, and then delete this file. This has
   many disadvantages, which zerofree alleviates:

      ·  it is slow;

      ·  it makes the disk image (temporarily) grow to its maximal extent;

      ·  it  (temporarily)  uses  all  free  space  on  the disk, so other
         concurrent write actions may fail.

   filesystem has to be unmounted or mounted  read-only  for  zerofree  to
   work.  It  will exit with an error message if the filesystem is mounted
   writable. To remount the  root  file-system  readonly,  you  can  first
   switch to single user runlevel (telinit 1) then use mount -o remount,ro
   filesystem.

También consulte este enlace sobre zerofree: Mantener las imágenes del sistema de archivos dispersas - es de su autor - Ron Yorston (9 de agosto de 2012)


24



Es importante que el sistema de archivos se desmonte o monte de solo lectura para que zerofree funcione. - AntonioK
Sería bueno incluir algo de información sobre cómo hacer esto en el sistema de archivos raíz. Mi sensación es que esto no funcionará, porque tendrías que desmontar el sistema de archivos, al mismo tiempo que ejecutabas la herramienta desde dicho sistema de archivos. - Ant6n


Aquí le mostramos cómo hacerlo con una GUI.

  1. Instalar BleachBit
  2. Ejecute como root haciendo clic en Aplicaciones - Herramientas del sistema - BleachBit como administrador.
  3. En las preferencias, dígale qué rutas desea. Generalmente los adivina bien. Desea incluir una ruta de escritura para cada partición. Generalmente eso es / home / username y / tmp, a menos que sean la misma partición, en cuyo caso simplemente elija uno.
  4. Marque la casilla Sistema - Limpiar espacio libre en disco.
  5. Haga clic en Eliminar.

El avance de BleachBit sobre dd (que de otra manera es muy agradable) es cuando el disco está finalmente lleno, BleachBit crea archivos pequeños para borrar los inodos (que contienen metadatos como nombres de archivo, etc.).


3



Inspeccionar El código python opensource de Bleachbit para borrar el espacio libre de una unidad para usted. - shadowbq


yo suelo dd para asignar uno o más archivos grandes para llenar el espacio libre, luego use una utilidad de eliminación segura.

Para asignar archivos con dd try:

dd if=/dev/zero of=delete_me bs=1024 count=102400

Esto generará un archivo llamado delete_me eso es 100 MB de tamaño. (Aquí bs es el "tamaño de bloque" establecido en 1k, y count es el número de bloques para asignar.)

Luego use su utilidad favorita de eliminación segura (he estado usando shred) en los archivos así creados.

Pero TEN EN CUENTA: el almacenamiento en búfer significa incluso si haces el todo disco, es posible que no obtenga absolutamente todo!


Esta enlazar recomienda scrub para limpiar el espacio libre No lo he probado.


2



Oh, si la memoria me sirve, lo intenté scrub una vez y corrompió todo el sistema de archivos. Afortunadamente tuve la buena sensación de experimentar primero en un sistema de archivos de prueba, NO en mis datos reales. - landroni


Limpie una unidad a la velocidad máxima.

Las instrucciones típicas para encriptar una unidad hoy en día le dirán que primero LIMPIE la unidad.

El siguiente comando llenará su disco con texto cifrado AES.

Use un CD en vivo si necesita limpiar su unidad de arranque principal.

Abra una terminal y eleve sus privilegios:

sudo bash

Vamos a enumerar todas las unidades en el sistema para estar seguro:

cat /proc/partitions

NOTA: reemplazar /dev/sd{x} con el dispositivo que desea limpiar.

ADVERTENCIA: ¡Esto no es para aficionados! ¡Podrías hacer que tu sistema no arranque!

sudo openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > /dev/sd{x}

Estoy sorprendido de lo rápido que es esto.


2





Probablemente ya tengas el Paquete GNU coreutils instalado en tu sistema Proporciona el comando desgarrar.


2



Shred no limpiará el espacio en disco sin usar sin convertirlo primero en archivos ... - dmckee