Ошибка Initramfs после восстановления образа с помощью dd

с a это будет выглядеть так:

sed '0,/^$/{
/^$/a \
---    
}' yourfilename

или, если вы хотите заменить вместо добавления:

sed '0,/^$/{s/^$/---/}' yourfilename

сценарии sed - для ясности

# from the first line through the first empty line
0,/^$/{
  # no \ needed here, just append it
  /^$/a ---
}

или

# from the first line through the first empty line
0,/^$/{
   # replace empty lines with `---'
   s/^$/---/
}

это работает, потому что адреса блока ограничивают его определенным диапазоном (от первой строки до первой пустой новой строки), только в строке, где закрывается блок, будет только команда s / ^ $ / --- / , получить делать что-либо.

2
08.02.2018, 22:09
1 ответ

Cuando tú dd,

Básicamente, una copia de disco directa consistente y exitosa solo se puede lograr a través de un sistema independiente como un Live CD, e incluso entonces debe tener cuidado con los sistemas de archivos que se montan automáticamente sin que usted lo sepa.

Además, si espera que haya errores de lectura (, por lo tanto, sync, noerrory otras convopciones ), es mucho más confiable ir con ddrescueen su lugar. Maneja correctamente los errores de lectura e incluso tiene la capacidad de reintentar y reanudar.

En general, las copias a nivel de bloque tienden a ser poco confiables porque es fácil cometer errores. La única razón por la que se hacen es que es el único método para producir una copia con consistencia perfecta(solo si se hace correctamente ).

Todos los demás enfoques son simplemente suficientemente buenos en la práctica, nunca perfectos. No hay forma de hacer una copia perfecta con procesos en ejecución que mantienen la mitad de sus datos en la memoria y la otra mitad en el disco. Tienes que apagarlo para obtener la imagen completa. (O virtualice todo y congélelo.)

Hay alternativas:

  • copias de seguridad basadas en archivos usando cp, rsync o programas de copia de seguridad dedicados como borg
  • herramientas específicas del sistema de archivos (xfsdump, btrfs send / snapshot,...)
  • LVM instantáneas(pero no con btrfs)
  • Las bases de datos necesitan un tratamiento especial y proporcionan sus propias herramientas de respaldo

Si debe ser una copia a nivel de bloque, también puede abusar del sistema mdadm para colocar una capa RAID 1 en la unidad de origen y usarla para producir una copia consistente de un sistema en ejecución agregando una unidad de destino.El RAID mantiene ambos lados en perfecta sincronización, por lo que evita principalmente el problema de la inconsistencia (siempre que permita que finalice la sincronización antes de quitar la unidad de destino ).

# RAID creation (before installing Linux)
mdadm --create /dev/md0 --level=1 --raid-devices=1 --force /dev/source

# /proc/mdstat
md0 : active raid1 sda2[3]
      134306472 blocks super 1.2 [1/1] [U]

# Add the target drive.
mdadm --grow /dev/md0 --raid-devices=2 --force
mdadm --manage /dev/md0 --add --write-mostly /dev/target

# Wait for RAID resilvering.
mdadm --wait /dev/md0
sync

# Remove the target drive.
mdadm /dev/md0 --fail /dev/target
mdadm /dev/md0 --remove /dev/target
mdadm --grow /dev/md0 --raid-devices=1 --force

Pero eso es un truco y la copia seguirá apareciendo como un sistema de archivos que no se desmontó correctamente. Esto es un poco menos peor que una pérdida de energía, ya que no puedes hacer un synccuando pierdes energía inesperadamente. Pero órdenes de magnitud mejor que dddonde el estado de la primera mitad de la imagen está horas por detrás de la última mitad.

Utilizo este método para duplicar mi única unidad SSD en HDD todas las semanas, sin evitar la inactividad de HDD. Si el SSD falla, el HDD se puede iniciar directamente con poco esfuerzo.

Por supuesto, también se puede lograr lo mismo con una copia basada en archivos.


Dado que menciona los UUID, la clonación de unidades a nivel de bloque clonará los UUID, lo que a su vez puede ser la causa del desastre. (En el caso del truco RAID anterior, están convenientemente ocultos detrás de la capa RAID.)

La copia basada en archivos a un nuevo sistema de archivos tendrá nuevos UUID, pero es razonablemente sencillo de resolver:

  • chroot, edite /etc/fstab, actualice initramfs, reinstale el gestor de arranque (encontrará el método chroot en básicamente todas las wikis de Linux)
  • de lo contrario, restaure los UUID antiguos cambiándolos con tune2fs -U <UUID>, existen herramientas similares para otros sistemas de archivos (requiere documentación, de lo contrario no sabrá los UUID que necesita ). Nuevamente, tenga cuidado de no duplicarlos, solo haga esto si el dispositivo anterior se ha ido por completo.
2
27.01.2020, 22:09

Теги

Похожие вопросы