APFS: fsroot tree no es válido después de la copia de seguridad de Time Machine: ¿cómo recuperar y evitar en el futuro?

6

Sistema

MacBook Pro, finales de 2013, 1 TB SSD (nuevo, recientemente reemplazado por Apple), APFS (sin registro en el diario, sin distinción de mayúsculas), High Sierra 10.13.2, Time Machine to network HDD.

Lo que pasó

  • Mac dejó de funcionar, no space left on device .
  • Ha fallado el reinicio.
  • Se intentó iniciar el modo de recuperación con Command-R y se ejecutó First Aid desde Disk Utility - porque aparentemente el sistema de recuperación también reside en el mismo disco que parece hacer que fsck en APFS sea imposible.
  • Se intentó eliminar manualmente algunos archivos a través de rm , se obtuvo no space left on device
  • Se intentó truncar algunos archivos manualmente a través de cat /dev/null > somefile , se obtuvo no space left on device
  • Inició el modo de recuperación con Shift-Command-R (descarga el sistema desde Internet) y ejecutó First Aid de nuevo. Esta vez con éxito limitado:

    ** Checking volume.
    ** Checking the container superblock.
    ** Checking the EFI jumpstart record.
    ** Checking the space manager.
    ** Checking the object map.
    ** Checking the APFS volume superblock.
    ** Checking the object map.
    error: invalid dstream.size (10730881024), is greater than dstream.alloced_size (71151616)
    error: xf : INO_EXT_TYPE_DSTREAM : invalid dstream
    error: inode_val: object (oid 0x16309a1): invalid xfields
    ** Checking the fsroot tree.
       fsroot tree is invalid.
    ** The volume /dev/rdisk2s1 could not be verified completely.
    

Así que aparentemente el árbol fsroot no es válido. He buscado, pero no he podido encontrar ningún consejo útil sobre cómo solucionar este problema (excepto, por supuesto, reformatear y restaurar desde una copia de seguridad, lo que me gustaría evitar).

Información de fondo adicional

En el sistema hay una VM de Parallels Windows con un disco duro virtual de 100 GB (sí, un archivo grande), que se usó recientemente (por lo que se necesitaba una copia de seguridad). La última vez que utilicé la computadora, aproximadamente 20 GB aún estaban libres en el SSO macOS. Durante aproximadamente un día, las copias de seguridad de Time Machine no se completaron, pero no se mostró ningún mensaje de error. Cuando ocurrió el problema, dejé la máquina encendida durante la noche para completar una copia de seguridad incremental de Time Machine. La conexión aquí es que, al parecer, Time Machine está utilizando instantáneas APFS. Sospecho que esta es la causa raíz de por qué ocurrió este desastre.

Preguntas

  1. ¿Hay alguna forma de solucionar esto (sin reformatear y restaurar desde la copia de seguridad)?
  2. ¿Cuál es la mejor manera de evitar esto en el futuro (especialmente con respecto a Time Machine)?

Gracias.

Actualizar

Cuando se ejecuta fsck_apfs con el indicador de depuración -d , la salida contiene un poco más de información:

** Checking volume.
** Checking the container superblock.
** Checking the EFI jumpstart record.
** Checking the space manager.
** Checking the object map.
** Checking the APFS volume superblock.
** Checking the object map.
error: invalid dstream.size (10730881024), is greater than dstream.alloced_size (71151616)
error: xf : INO_EXT_TYPE_DSTREAM : invalid dstream
error: inode_val: object (oid 0x16309a1): invalid xfields
obj-id: 23267745 type: Inode      
private-id: 23267745 parent-id: 12896552 cr/mtime: 1515089959653928186/1515090145416398252 
def-prot-class: 0 
uid/gid/mode: 0/0/0x8180 bsd_flags: 0x0 internal_flags: 0x8280 name: NO-NAME
** Checking the fsroot tree.
   fsroot tree is invalid.
** The volume /dev/disk2 could not be verified completely.
    
pregunta hendrik 05.01.2018 - 09:59

1 respuesta

3

Me acabo de encontrar con un problema similar. Probablemente hubiera encontrado que el problema estaba en uno de los archivos de la VM de Parallels, al menos ese fue el culpable en mi caso. Tu cheque fsck_apfs -d /disk/<disk> devuelto:

obj-id: 23267745 type: Inode

Si hubiera abierto el terminal, podría haber obtenido la ruta al archivo (o archivos) usando ese inodo usando el siguiente comando:

find / -inum 23267745

A partir de ahí, sabrías qué archivos necesitaban ser restaurados en lugar de hacer una restauración completa.

En mi caso, el archivo de VM solo estaba disponible en la instantánea, ya que excluyo mis VM de TimeMachine. Restauré solo ese archivo de una instantánea anterior y obtuve más información a través de fsck_apfs: se introdujo en el disco para verificar las instantáneas y luego se bombardeó en el mismo archivo en la segunda instantánea. Afortunadamente, las instantáneas solo se guardan durante un máximo de 24 horas, por lo que debería aclararse después de ese punto.

Su kilometraje puede variar, sin embargo, ya que podría ser tan "simple" como un solo archivo o simplemente la punta del iceberg.

    
respondido por el CWoods 15.05.2018 - 08:52

Lea otras preguntas en las etiquetas