как редактировать таблицу разделов системы, когда вы клонируете ее на другой диск, на котором нет такой же таблицы разделов?

Подстановочные знаки раскрываются оболочкой, а не командой. find— одна из немногих команд, выполняющих сопоставление с подстановочными знаками, аналогичное оболочке, в свое время.

Когда вы запускаете ls *.jav, сначала оболочка расширяет *.javдо списка соответствующих файлов, например. file1.javfile2.javfile3.jav, а затем оболочка вызывает lsс результирующим списком аргументов file1.javfile2.javfile3.jav. Вот почему вы видите тот же список имен файлов с echo *.jav, хотя echoничего не знает о файлах и не заботится о том, являются ли его аргументы именами файлов.

Когда вы бежитеfind. -name "*.jav":

  1. Оболочка анализирует командную строку для распознавания специальных символов и разбивает ее на слова и знаки препинания. Здесь просто список слов find, ., -name, *.jav, где *цитируется. Поскольку *взят в кавычки, это обычный символ с точки зрения оболочки.
  2. Оболочка запускает команду findс указанным списком аргументов :., -name, *.jav.
  3. findищет файлы, имя которых соответствует шаблону *.javв любом каталоге в текущем каталоге.

При запуске find. -name *.javи отсутствии файлов, соответствующих*.jav:

  1. Оболочка анализирует командную строку для распознавания специальных символов и разбивает ее на слова и знаки препинания. Здесь просто список слов find, ., -name, *.jav, где *не заключено в кавычки.
  2. Поскольку слово *.javсодержит подстановочный знак без кавычек, оболочка выполняет генерацию имени файла. Поскольку соответствующих имен файлов нет, шаблон остается нераскрытым.
  3. Оболочка запускает команду findс полученным списком аргументов: ., -name, *.jav.
  4. findищет файлы, имя которых соответствует шаблону *.javв любом каталоге в текущем каталоге.

Когда вы запускаете find. -name *.javи текущий каталог содержит file1.jav, file2.javиfile3.jav:

  1. Оболочка анализирует командную строку для распознавания специальных символов и разбивает ее на слова и знаки препинания. Здесь просто список слов find, ., -name, *.jav, где *не заключено в кавычки.
  2. Поскольку слово *.javсодержит подстановочный знак без кавычек, оболочка выполняет генерацию имени файла :*.jav, заменяется списком совпадающих имен файлов.
  3. Оболочка запускает команду findс результирующим списком аргументов: ., -name, file1.jav, file2.jav, file3.jav.
  4. findжалуется на синтаксическую ошибку, когда достигает file2.jav.

Когда вы запускаете find. -name *.javи текущий каталог содержит один соответствующий файлfile.jav:

  1. Оболочка анализирует командную строку для распознавания специальных символов и разбивает ее на слова и знаки препинания. Здесь просто список слов find, ., -name, *.jav, где *не заключено в кавычки.
  2. Поскольку слово *.javсодержит подстановочный знак без кавычек, оболочка выполняет генерацию имени файла.:*.javзаменяется списком совпадающих имен файлов.
  3. Оболочка запускает команду findс полученным списком аргументов: ., -name, file.jav.
  4. findвидит вполне допустимую команду, но, вероятно, это не то, что вы хотели.:findсказано искать файлы с именем file.javв любом каталоге, а не искать какой-либо файл, соответствующий *.jav.

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

(То, что я описываю, является поведением по умолчанию большинства распространенных оболочек :sh, bash, dash, ksh, … Некоторые оболочки могут быть настроены для отображения ошибки вместо запуска команды с нерасширенными подстановочными знаками или для расширения не -сопоставление подстановочных знаков пустому списку.Ни один из них не поможет здесь.)

1
17.11.2020, 18:40
1 ответ

Rsync не подходит для этого варианта использования. Лучше использовать его при попытке резервного копирования DATA файловых систем, а не самой SYSTEM .

Вместо этого вы можете использовать команду dd :

Остановите размещенные приложения и службы.

Скопируйте весь диск с помощью dd и заархивируйте его.

sudo dd if=/dev/sda conv=sync,noerror bs=64K | gzip -c > <path>/backup_image.gz

Выполнить проверку контрольной суммы в почтовом индексе.

Разархивируйте резервную копию.

Загрузите целевую систему с live CD Установка.

Перенесите zip и файл контрольной суммы используя rsync или scp .

Выполните контрольную сумму для полученного zip-архива и сравните обе контрольные суммы.

Разархивируйте и скопируйте резервный диск на новый:

gunzip -c <path_to_diskX>.gz | dd of=/dev/diskY

О вашем последнем комментарии:

dd выполнить побитовое копирование. Поскольку ваш целевой диск меньше исходного, и вы используете MBR , который находится в первом секторе. Для этого вам необходимо выполнить дополнительные действия.

На исходном диске:

Отключите пространство подкачки .

Измените размер и уменьшите ваши файловые системы только до используемого пространства (+ несколько мегабайт ).

Уменьшить разделы с помощью gparted или другой утилиты (размер должен быть

На целевом диске:

Проверьте раздел с помощью gparted .

Запустите fsck в своих файловых системах.

1
18.03.2021, 22:49

Теги

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