it-swarm-es.com

¿Cómo puedo eliminar los archivos de Time Machine utilizando la línea de comandos?

Quiero eliminar algunos archivos/directorios de mi Time Machine Partition usando rm , pero no puedo hacerlo. Estoy bastante seguro de que el problema está relacionado con algún tipo de atributos de control de acceso extendido en los archivos en la copia de seguridad, pero no sé cómo anularlos/deshabilitarlos para obtener rm para trabajar. Un ejemplo del error que estoy recibiendo es:

% Sudo rm -rf Backups.backupdb/MacBook/Latest/MacBook/somedir
rm: Backups.backupdb/MacBook/Latest/MacBook/somedir: Directory not empty
rm: Backups.backupdb/MacBook/Latest/MacBook/somedir/somefile: Operation not permitted

Hay varias razones por las que no quiero usar la GUI de Time Machine ni el Finder para esto. Si es posible, me gustaría poder mantener la protección extendida para todos los demás archivos (no me gustaría desactivarlos globalmente, a menos que pueda volver a habilitarlos una vez que haya realizado mi trabajo).

65
Tim

Para evitar los errores de "operación no permitida", use el programa Time Machine Safety Net "bypass":

Sudo /System/Library/Extensions/TMSafetyNet.kext/Contents/MacOS/bypass rm -rfv /Volumes/[disk]/Backups.backupdb/[path]

En 10.8 Mountain Lion, el bypass se trasladó a 'Ayudantes':

/System/Library/Extensions/TMSafetyNet.kext/Helpers/bypass

En 10.10 Yosemite, el bypass se movió aquí:

/System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass

Tenga cuidado al usar esto para eliminar instantáneas específicas: como Time Machine usa enlaces duros, el uso de rm -r en las carpetas también puede afectar a las instantáneas más antiguas y más recientes de la misma máquina . (Consulte otras respuestas que se refieren a tmutil delete para eliminar de forma segura una instantánea específica.) Sin embargo, usar rm para eliminar todas las instantáneas de una sola máquina está bien. Y también lo es usar rm para eliminar un archivo específico, que solo eliminará ese archivo de las instantáneas que especifique, asumiendo que el archivo no se encuentra en un directorio con enlaces rígidos, ya que entonces realmente eliminará el archivo de todos esos directorios enlazados.

110
Eric W

BLUF (línea inferior en la parte delantera):

Sudo tmutil delete snapshot-dir


El uso de Sudo chmod -R -N folder para eliminar todas las ACL de una jerarquía de carpetas no funciona en los archivos y carpetas en Backups.backupdb de Time Machine, debido a elTM Safety Netel mecanismo y los criterios descritos en este 318 Tech Journal post (pero posiblemente no exactamente como descrito).
(Antes de aprender esto de buscar la Red de Seguridad mencionada en la respuesta de Eric W (que funciona), solo había probado en una carpeta clonada de una subcarpeta de una copia de seguridad de TM, y allí chmod pero intentar _ chmod en una carpeta en una copia de seguridad TM real da el error "Operación no permitida").

De posible uso:
En Mac OS 10.7+, hay un tmutil comando (que No lo he intentado, ya que todavía estoy en Snow Leopard). Tiene undeleteverbo, que de acuerdo con la descripción "puede eliminar instantáneas de copias de seguridad que no fueron realizadas por la máquina actual" (donde una "instantánea" es una carpeta con fecha que representa una única copia de seguridad incremental). No me queda claro si esto significa que no puede eliminar las instantáneas que son creadas o reclamadas por la máquina actual. (?)

26
Arne Stenström

Una advertencia sobre el uso del comando bypass para eliminar una copia de seguridad anterior: si la copia de seguridad eliminada tiene carpetas que son exactamente iguales en las copias de seguridad anteriores o posteriores, los archivos también podrían eliminarse de las copias de seguridad anteriores o posteriores !

Time Machine no solo usa enlaces duros para archivos sin cambios, sino que también usa enlaces duros para carpetas en las que no se agregaron, modificaron o eliminaron archivos. Esto resulta en algo como:

/2014-11-06/folder/file1
                  /file2
                  /file3
/2014-11-13/folder/file1 = hard link to file /2014-11-06/folder/file1
                  /file2 (changed; new inode)
                  /file3 = hard link to file /2014-11-06/folder/file3
/2014-11-20/folder/ = hard link to folder /2014-11-13/folder/
/2014-11-27/folder/ = hard link to folder /2014-11-20/folder/

Con lo anterior, eliminar cualquier archivo de /2014-11-06/folder/ está bien, y solo afecta la copia de seguridad para esa fecha. Los recuentos de referencia del enlace físico disminuyen, por lo que se eliminará el " inodo " para file2, pero los inodos para file1 y file3 seguirán teniendo un recuento de referencia de 1 debido a las copias de seguridad posteriores. Por lo tanto, rm -R /2014-11-06 también está bien.

Sin embargo, la eliminación de cualquier archivo de /2014-11-13/folder/, /2014-11-20/folder/ o /2014-11-27/folder/ lo eliminará de manera efectiva de las 3 carpetas.

El problema es que rm -R no se preocupa por las carpetas enlazadas. Simplemente vuelve a aparecer en cualquier carpeta enlazada que encuentre, borra audazmente todos sus archivos y luego elimina la carpeta vacía.

Por lo tanto: al eliminar una copia de seguridad anterior, no debe retroceder en una carpeta enlazada y eliminar su contenido. En su lugar, solo se debe eliminar el enlace físico de la carpeta . Entonces, en lugar de rm -R, use tmutil delete como se explica en la respuesta de Arne .

Además, parece que el comando OS X unlinkno se puede usar en carpetas : "solo un argumento, que no debe ser un directorio, puede ser suministrado ". La API de OS X puede eliminar carpetas vinculadas, y también puede GNU Coreutils , como instalarse utilizando Homebrew .

Finalmente, para probar todo lo anterior, un caso de prueba (OSX 10.6.8):

sh-3.2# ls -lFa 2014-11*/Users/USERNAME/Library/Safari/TopSites.plist 
[email protected] 2 USERNAME  staff  1551 10 30  2014 2014-11-06-012454/Users/USERNAME/Library/Safari/TopSites.plist
[email protected] 2 USERNAME  staff  1551 10 30  2014 2014-11-13-024438/Users/USERNAME/Library/Safari/TopSites.plist
[email protected] 2 USERNAME  staff  1551 10 30  2014 2014-11-20-014044/Users/USERNAME/Library/Safari/TopSites.plist
[email protected] 2 USERNAME  staff  1551 10 30  2014 2014-11-27-025033/Users/USERNAME/Library/Safari/TopSites.plist

Tenga en cuenta que el número de enlaces para cada aparición es 2 (segunda columna). Vamos a eliminar la primera aparición:

sh-3.2# /System/Library/Extensions/TMSafetyNet.kext/Contents/MacOS/bypass unlink 2014-11-06-012454/Users/USERNAME/Library/Safari/TopSites.plist 
sh-3.2# ls -lFa 2014-11*/Users/USERNAME/Library/Safari/TopSites.plist 
[email protected] 1 USERNAME  staff  1551 10 30  2014 2014-11-13-024438/Users/USERNAME/Library/Safari/TopSites.plist
[email protected] 1 USERNAME  staff  1551 10 30  2014 2014-11-20-014044/Users/USERNAME/Library/Safari/TopSites.plist
[email protected] 1 USERNAME  staff  1551 10 30  2014 2014-11-27-025033/Users/USERNAME/Library/Safari/TopSites.plist

Entonces, después de desvincular uno de los archivos, la cantidad de enlaces se redujo a 1 por cada aparición, aunque el archivo aún se muestra 3 veces. No hay problemas todavía. Retire la primera vez que vuelva a aparecer:

sh-3.2# /System/Library/Extensions/TMSafetyNet.kext/Contents/MacOS/bypass unlink 2014-11-13-024438/Users/USERNAME/Library/Safari/TopSites.plist 
sh-3.2# ls -lFa 2014-11*/Users/USERNAME/Library/Safari/TopSites.plist 
ls: 2014-11*/Users/USERNAME/Library/Safari/TopSites.plist: No such file or directory

Ahora todos se han ido. Aparentemente, el archivo TopSites.plist se modificó por última vez el 2014-11-06 y se vinculó por hardware el 2014-11-13, ya que luego se agregaron, modificaron o eliminaron otros archivos en la carpeta Safari. A continuación, el contenido de la carpeta Safari no cambió en las dos copias de seguridad subsiguientes, por lo que en 2014-11-20 y 2014-11-27 la carpeta Safari se vinculó con la copia de seguridad anterior.

De hecho, las 4 carpetas solo usan 2 inodos (primera columna):

sh-3.2# ls -lFaid 2014-11*/Users/USERNAME/Library/Safari/
648651968 [email protected] 86 USERNAME  staff  2924  9 10 16:06 2014-11-06-012454/Users/USERNAME/Library/Safari//
650804457 [email protected] 86 USERNAME  staff  2924  9 10 16:07 2014-11-13-024438/Users/USERNAME/Library/Safari//
650804457 [email protected] 86 USERNAME  staff  2924  9 10 16:07 2014-11-20-014044/Users/USERNAME/Library/Safari//
650804457 [email protected] 86 USERNAME  staff  2924  9 10 16:07 2014-11-27-025033/Users/USERNAME/Library/Safari//
12
Kent

Nota: debido a la "Red de seguridad TM" mencionada por Eric W, esta respuesta no funciona en el caso de una copia de seguridad de Time Machine, a la que se refiere específicamente la pregunta. Pero para la mayoría de los casos, la información sobre cómo deshacerse de las ACL es relevante.


No es necesario utilizar herramientas de ACL copiadas de un sistema operativo anterior.

Use ls -le para ver las ACL y chmod para modificarlas.

Para obtener más información, escriba man chmod y busque en "Opciones de manipulación de ACL".

El comando para eliminar todas las ACL de una jerarquía de carpetas es:

chmod -R -N foldername
3
Ram

La máquina del tiempo funciona como rshapshot. Crea un árbol de enlaces duros para cada nueva copia de seguridad. Los enlaces físicos a archivos que ya existen en una copia de seguridad anterior utilizan muy poco espacio adicional. Solo cuando se elimina el último enlace fijo a un archivo, el archivo se elimina realmente del sistema de archivos.

La eliminación de una copia de seguridad individual completa no hará daño. Sólo estás eliminando enlaces duros. Ninguna otra copia de seguridad se verá afectada. Pero eso puede lograrse vía tmutil.

Un escenario en el que puede ser necesario omitir la protección es eliminar un archivo específico de todas las copias de seguridad (y la razón por la que terminé en esta publicación).

Mi disco de copia de seguridad está lleno. Tengo un archivo muy grande (muchos gigabytes) que se ha respaldado durante meses. Hay una copia física del mismo, pero muchas instantáneas con enlaces duros a esa copia. Para realmente deshacerme de ese archivo, necesito eliminar el enlace duro de cada copia de seguridad.

Tenga en cuenta que el número de inodo es el mismo para todos los enlaces duros al mismo archivo.

% cd /Volumes/WD\ 500G\ USB/Backups.backupdb/csm-laptop
% ls -li */Macintosh\ HD/Users/csm/vm.img
...
2740350 [email protected] 28 csm  staff  42949672960 Feb 17 16:12 2015-05-08-005636/Macintosh HD/Users/csm/vm.img
2740350 [email protected] 28 csm  staff  42949672960 Feb 17 16:12 2015-05-08-015812/Macintosh HD/Users/csm/vm.img
2740350 [email protected] 28 csm  staff  42949672960 Feb 17 16:12 2015-05-08-030036/Macintosh HD/Users/csm/vm.img
2740350 [email protected] 28 csm  staff  42949672960 Feb 17 16:12 2015-05-08-041307/Macintosh HD/Users/csm/vm.img
2740350 [email protected] 28 csm  staff  42949672960 Feb 17 16:12 Latest/Macintosh HD/Users/csm/vm.img

(Lo último es solo un enlace simbólico al último directorio fechado)

% Sudo bypass rm -f */Macintosh\ HD\Users\csm\vm.img

El archivo se elimina de todas las copias de seguridad y se devuelve el espacio. Si el archivo ha cambiado con el tiempo, cada copia de seguridad tendrá una copia completa y el espacio devuelto será enorme.

2
Curt

Si no está ejecutando el comando como el usuario que "posee" la copia de seguridad, tendrá dificultades para eliminar de la línea de comandos. Acabo de tener este problema con una migración, y tuvimos que ir a toda la copia de seguridad de Time Machine (1tb +) y formatear la unidad antes de que pudiéramos acceder a ella, y confío en mí, intenté todo para anular los permisos.

0
Nic

Puede hacer que ls liste los atributos extendidos en una vista larga usando el indicador [email protected]. Enumera las ACL cuando suministre el indicador -e. Entonces, puedes averiguar con qué estás tratando usando ls [email protected] DIR.

A juzgar por mis copias de seguridad locales de Time Machine, parece que Time Machine aplica atributos extendidos con metadatos sobre las instantáneas más nuevas y antiguas. Los datos almacenados por xattrs parecen ser una lista binaria. Estos parecen inocuos.

Time Machine también busca aplicar ACL a ciertos directorios que conoce, como los que se encuentran en un directorio de usuarios estándar. Hay dos tipos de ACL que se interponen en su camino: las que se aplican directamente al archivo o directorio que niegan la eliminación y las que se aplican a un elemento primario del archivo que niegan delete_child.

Desafortunadamente, Mac OS X no proporciona las utilidades de usuario getfacl y setfacl especificadas por POSIX.2c para ver y manipular las ACL. Para meterse con las ACL, tendrás que hacer algo de programación; Consulte la página de manual acl(3).

0
Jeremy W. Sherman

Si desea eliminar todos los archivos de una carpeta y no solo archivos específicos, puede hacerlo agregando la carpeta a la lista de exclusión de Time Machine. (Preferencias del sistema -> Time Machine -> Opciones. Arrastre la carpeta aquí).

La próxima vez que realice una copia de seguridad, las copias de esa carpeta se eliminarán de las copias de seguridad anteriores.

Ahora, si usted realmente quiere hacer esto desde una CLI, hay una manera, aunque un poco incómoda.

  1. Haga una copia de seguridad de /Library/Preferences/com.Apple.TimeMachine.plist
  2. Copie /Library/Preferences/com.Apple.TimeMachine.plist en algún lugar donde pueda jugar con él.
  3. Cd en donde lo pongas.
  4. Execute
    plutil -convert xml1 com.Apple.TimeMachine.plist
    para convertirlo de forma binaria.
  5. Abra el plist convertido en el editor de texto preferible, busque "skippaths"
  6. Inserte una nueva línea en esa sección, formateada como <string>/Path/To/Exclude</string>
  7. Guardar y salir, convertir de nuevo ejecutando
    plutil -convert binary1 com.Apple.TimeMachine.plist
  8. Copie su lista editada de nuevo en/Biblioteca/Preferencias /
  9. Iniciar una copia de seguridad ejecutando
    /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper -auto

Editar: Cuando realice el paso 9, todas las copias de la carpeta recién excluida se borrarán de las copias de seguridad anteriores.

Para eliminar la excepción, vuelva a copiar su copia de seguridad en/Biblioteca/Preferencias.

0
Frost