Немного предыстории:
Ваша команда mycommand
не отправляет SIGINT повторно, когда получает его, а просто завершает работу. Из-за этого bash
, выполняющий цикл, не может определить, что CTRL+C был использован для завершения выполнения, и предполагает, что это было просто сочетание клавиш, которое вы набрали для mycommand
. Поскольку было бы нежелательно завершать работу оболочки из-за комбинации клавиш (представьте, например, использование vi
), bash
просто продолжит выполнение очередной итерации цикла.
Окончательным решением было бы исправить mycommand
, чтобы он убивал себя с помощью SIGINT, когда получает его, давая bash
знать, что он тоже должен остановиться.
void sigint_handler(int sig)
{
// Execute your normal handler
signal(SIGINT, SIG_DFL); // don't catch the signal anymore
kill(getpid(), SIGINT); // kill itself with the same signal
}
Источник: http://www.cons.org/cracauer/sigint.html
Если вы не можете исправить mycommand
, вам придется либо закрыть терминальную сессию, либо убить процесс bash
, который выполняет цикл, и текущий экземпляр mycommand
, в таком порядке.
Sí, la solución más sencilla es
dd if=/dev/sda of="/media/usb/$(date).img"
Eso es lento y ocupa mucho espacio para que pueda
Probablemente te perdiste el sector de arranque, los UUID y deberías leer sobre grub yhttps://en.m.wikipedia.org/wiki/Windows_Vista_startup_process
pv
método Podría usarpv
(la página de manual)utilidad así:
sudo sh -c 'pv < /dev/sda > /destination'
Por supuesto, podría convertirse en root primero:
sudo -i
Y luego solo haz la copia de seguridad:
pv < /dev/sda > /BackupDestination
Y luego, cuando sea necesario, haga restaurar:
pv < /BackupDestination > /dev/sda
Esto básicamente hace el mismo trabajo que dd
en la otra respuesta, pero es más rápido y muestra progreso.
Este método puede ser más lento que rsync
, pero solo copia archivos, lo cual no está previsto.
Copia todo 1 :1, una copia perfecta se podría decir.
También necesita el sector de arranque para que arranque más tarde. El método más simple es hacer una copia de seguridad de todo el disco.
Para mostrar el progreso condd
(página del manual ), simplemente puede agregar el comando:
status=progress
Para que pueda comprimir la imagen de manera efectiva después, no olvide poner a cero el espacio libre.
Al igual que otras soluciones publicadas hasta ahora, esta muestra el progreso(como la solución pv
, no en relación con el total, solo el número de MB transferidos )y no comprime (una partición de 100 GB daría como resultado un archivo de 100 GB ), pero respalda solo la partición del sistema de archivos (sda1
), no todo el disco o la partición:
dcfldd if=/dev/sda1 of=Image.dd bs=2M
La herramienta dcfldd es una simple dd
que muestra el progreso.
El tamaño de búferbs=2M
me parece un buen valor para dispositivos USB (una partición de 120 GB copiada en aproximadamente 15 -20 minutos ).
Probado funcionando en Windows 10 versión 1803. No es necesario (o eso parece )hacer una copia de seguridad también de todo el disco duro, felizmente.
Por supuesto, comprimir el archivo resultante más tarde probablemente sea una buena idea.
Я только что успешно завершил описанный сценарий резервного копирования Windows 10 из Linux в файл и их восстановления на новом диске.
На старом диске нет свободного места от Windows, выполнив
zdelete -z c:
с помощью SУдалить .
Получите активный USB-накопитель Linux для загрузки и резервного копирования MBR и таблицы разделов на запасной диск
dd if=/dev/sda of=/somewhere/mbr bs=512 count=63
скопировать загрузочный раздел в файл
dd if=/dev/sda1 bs=1M status=progress | lz4 > /somewhere/sda1.lz4
скопировать системный раздел в файл
dd if=/dev/sda2 bs=1M status=progress | lz4 > /somewhere/sda2.lz4
Вставьте новый диск в компьютер, снова загрузите живой Linux. и восстановить начало диска
dd of=/dev/sda if=/somewhere/file.mbr
Это дает вам тот же основной макет раздела (разделов внутри расширенного раздела хранятся где-то еще и не будут восстановлены при этом ).
Теперь восстановите два раздела Windows
dd of=/dev/sda1 bs=1M status=progress < lz4cat /somewhere/sda1.lz4
dd of=/dev/sda2 bs=1M status=progress < lz4cat /somewhere/sda2.lz4
Диск не загружается на данном этапе (grub жалуется ). Итак, загрузите аварийный диск Windows или установочный носитель и выберите «восстановить». В разделе «Устранение неполадок» запустите командную строку и беги
bootrec /fixmbr
На этом этапе я загрузил исходную систему Windows с нового диска большего размера. Я получил степень сжатия 50% как с gzip, так и с lz4 (с полным диском 70% ), но gzip был ограничен скоростью процессора (27 МБ / с в моем случае ), а lz4 не был (480 МБ. /s Ограничение ЦП, 180 МБ/с ограничение моего резервного диска ).
Моя первая попытка была с ntfsclone
, но она не создавала загрузочную Windows (, она жаловалась на отсутствие некоторых файлов в \Windows\System32 ). Я не уверен, почему это не сработало. В конце решение dd
+ lz4
создало изображение меньшего размера, чем ntfsclone
само по себе. Ваш пробег может варьироваться в зависимости от того, насколько заполнен диск. Ошибки по модулю вntfsclone
-dd
кажутся намного проще исправить:-)