Как переместить образ ОС с одного устройства на другое?

Ситуация и проще, и сложнее, чем предполагает ваш вопрос. Перефразируя то, что Кусалананда говорит в своем ответе, есть два стандартных (обычных) потока ввода/вывода (файловые дескрипторы) которые традиционно настроены и используются для вывода: stdout (файловый дескриптор1) и stderr (файловый дескриптор2). Наш канонический вопрос, Что такое операторы управления и перенаправления оболочки?, обсуждает, как перенаправить их. Наивно, мы можем перечислить пять различных комбинаций:

╔══════════════════════════════╦═════════════════════════════════════════════╗
║                              ║                   stderr                    ║
║                              ╟─────────────────────┬───────────────────────╢
║                              ║       default       │                       ║
║                              ║ (same as the shell) │       redirected      ║
╠════════╤═════════════════════╬═════════════════════╦═══════════════════════╣
║        │       default       ║                     ║                       ║
║        │ (same as the shell) ║          1          ║           2           ║
║        ├─────────────────────╠═════════════════════╬═══════════════════════╣
║ stdout │                     ║                     ║ 4. redirected         ║
║        │                     ║                     ║    to the same file   ║
║        │      redirected     ║          3          ╟───────────────────────╢
║        │                     ║                     ║ 5. redirected         ║
║        │                     ║                     ║    to different files ║
╚════════╧═════════════════════╩═════════════════════╩═══════════════════════╝

, но если вы считаете /dev/null отличными от файла, и добавить режим как частный случай, и режим чтения-записи отличается от режима только записи, и трубы как отличные от файлов, тогда количество комбинаций увеличивается в геометрической прогрессии. Однако, как неоднократно заявлялось, «конечный результат stdout» не является стандартной фразой Unix/Linux/bash.

Только два?

Другие ответы (возможно, мудро) ограничились на stdout и stderr (файловые дескрипторы 1 и 2). Я (опрометчиво?) считаю, что полный ответ на этот вопрос следует учитывать тот факт, что доступны другие файловые дескрипторы — до сотен, тысяч или даже более миллиона. Например, если вы запустите команду вида difffile1file2, программа diff откроет файл1 и файл2, и ядро, вероятно, назначит файловые дескрипторы 3 и 4. Разница в том, что предопределены только файловые дескрипторы 0, 1 и 2. Перенаправление файловых дескрипторов выше 2 обсуждается в следующих местах:

Например, см. этот пример высокого дескриптора файла:

$ cat canine.c
#include 
#include 

main()
{
        int     i, len;
        char    msg[] = "Hello, dog.\n";

        len = strlen(msg);
        i = write(17, msg, len);
        if (i == len)
                printf("Success!  i = %d = len\n", i);
        else if (i == -1)
            {
                printf("Error!  i = %d (len = %d)\n", i, len);
                perror("");
            }
        else
                printf("Unexpected result: i = %d, len = %d\n", i, len);
}

$ make canine
cc     canine.c   -o canine

$ ./canine
Error!  i = -1 (len = 12)
Bad file descriptor

$ ./canine 17> animal
Success!  i = 12 = len

$ ls -l
total 70
-rw-r--r-- 1 myusername mygroupname    12 Apr 12 13:36 animal
-rwxr-xr-x 1 myusername mygroupname 67067 Apr 12 13:36 canine
-rw-r--r-- 1 myusername mygroupname   358 Apr 12 13:36 canine.c

$ cat animal
Hello, dog.

Предупреждение: я не уверен, что приведенное выше будет работать для всех версий всех оболочек.

Стандартные программы не пишут в файловые дескрипторы выше 2. (если только они не получили этот файловый дескриптор от ядра открыв файл, установив сетевое подключение или что-то в этом роде). Но если у вас есть (нестандартная) программа, которая делает это, вы можете перенаправить эти файловые дескрипторы.

И если у вас всего 100 файловых дескрипторов, и вы считаете только, перенаправляется ли каждый из них или нет, у вас более нониллиона (1 000 000 000 000 000 000 000 000 000 000) возможные комбинации.

1
09.02.2017, 10:59
3 ответа

dd - это самый надежный способ ИМО, поскольку он делает копию вашего жесткого диска на SSD. Хотя вы должны иметь в виду, что SSD должен быть такого же или большего размера, поскольку команда dd будет дублировать каждый блок на вашем жестком диске на SSD. Так что это должно соответствовать.

Лучше переустановить ОС на SSD и передать свои данные с помощью rsync или около того.

0
28.01.2020, 01:01

Если вы хотите сделать побитовую копию, вам следует использовать другую машину.

Извлеките жесткий диск из исходного устройства и подключите жесткий диск и твердотельный накопитель к другому компьютеру Linux с помощью кабеля SATA. Затем загрузите этот компьютер и убедитесь, что он распознает оба диска. Скопируйте содержимое жесткого диска (предположим, это / dev / sdb ) на SSD ( / dev / sdc ):

cat /dev/sdb > /dev/sdc  

Да, вы можете безопасно использовать cat вместо dd . Не только cat отлично может обрабатывать двоичные потоки (по крайней мере, во всех современных дистрибутивах Linux), но он также выбирает оптимизированный размер блока для копии, поэтому копирование будет быстрее. По надежности он такой же, как dd .

После завершения копирования вы можете установить SSD на исходный компьютер, и он сразу же заработает.

Обратите внимание, что, поскольку вы сказали, что размер SSD больше, в конце диска будет пустое пространство - тогда вам следует использовать инструмент для создания разделов на нем, чтобы не тратить лишнее место на диске. Однако, если вы этого не сделаете, ничего страшного не произойдет.

0
28.01.2020, 01:01

Я полагаю, что SSD не того же размера? Лично я бы подключил SSD как дополнительный диск, сделал схему разделов и использовал rsync для копирования данных. Чтобы упростить процесс, я бы использовал live CD с моим дистрибутивом, чтобы «заморозить» любой источник изменений на диске. При необходимости необходимо установить загрузчик на новый диск.

0
28.01.2020, 01:01

Теги

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