Вопрос: Проблема с резервным копированием tar: почему есть / dev / disk / by-id / symlinks и как я могу их избежать?


Я пытаюсь создать систему резервного копирования с использованием самых простых инструментов, доступных на openSUSE 11.3 (в данном случае: bash, fdisk, tar & grub legacy)

Вот рабочий процесс для моих скриптов:

backup.sh:

  1. (Запуск от внешней системы, например, LiveCD)
  2. создать скрипт fdisk ($ fscript) из вывода fdisk -l [работает]
  3. монтируйте разделы из fstab системы [работает]
  4. tar важный материал в file.tgz [работает]

restore.sh:

  1. (Запуск от внешней системы, например, LiveCD)
  2. запустить fdisk $ dest <$ fscript для восстановления разбиения на разделы [работает]
  3. форматировать и монтировать разделы из fstab системы [Не может]
  4. извлечь из file.tgz [работает при монтаже вручную]
  5. восстановить grub [Не может]

Недавно я заметил, что openSUSE (хотя я уверен, что он не имеет ничего общего с дистрибутивом) имеет другой вывод в / etc / fstab и /boot/grub/menu.lst, точнее, имя раздела, например,/ DEV / диск / по-ид / номер-morenumbers-фирменный-part2" вместо "/ DEV / sda2»- но в основном это простая символическая ссылка.

Мои вопросы по этому поводу:

  • в чем смысл таких символических ссылок, особенно если мы восстанавливаемся на другом диске?
  • есть ли способ, чтобы чисто предотвратить создание этих символических ссылок и вместо этого использовать «истинный» / dev / sdx?
  • если предыдущее - нет, знаете ли вы способ заменить эти символические ссылки «на лету» в текстовом файле? Я пробовал этот скрипт, но работает только в том случае, если файл начинается с описания символьной ссылки (случай fstab, а не menu.lst):

    ### search and replace /dev/disk/by-id/... to /dev/sdx
    while read oldVolume rest; do # get first element, ignore rest of line
        if [[ "$oldVolume" =~ ^/dev/disk/by-id/.*(-part[0-9]*$)? ]]; then
            newVolume=$(readlink $oldVolume) # replace pointer by pointee, returns "../../sdx"
            echo /dev/${newVolume##*/} $rest >> TMP # format to "/dev/sdx", write line
        else
            echo $oldVolume $rest >> TMP # nothing to do
        fi
    done < $file
    mv -f TMP $file # save changes
    

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

Спасибо.


0
2018-03-02 16:32


Источник




Ответы:


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

Я часто использовал эти символические ссылки для решения проблем с ZFS и дисками, которые перемещают узлы устройств (особенно USB-диски).

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

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


1
2018-03-02 16:39



Используйте опции -exclude или -exclude-from команды tar для исключения исключений. Используйте функцию -xdev для поиска, чтобы избежать пересечения границ файловой системы. - Chris Nava
Я понимаю, что / dev не требуется для резервного копирования, и я знаком с аргументом --exclude. Моя истинная проблема заключается в том, что символические ссылки в fstab и menu.lst не могут использоваться при восстановлении на пустой диск, потому что символические ссылки не существуют в данный момент (мы находимся в LiveCD во время восстановления). Таким образом, простое чтение исходного fstab приведет к отказу от монстров, которые я пытаюсь сделать. Я могу монтировать каждый раздел вручную, но я хотел бы автоматизировать его с помощью / dev / sdx. Та же проблема возникает и для grub, который также имеет символические ссылки на id. - SK.
Просто не восстанавливайте файл tar поверх существующей файловой системы. Извлеките во временное место, а затем переместите вещи, которые вы хотите сохранить в правильном месте. - Chris Nava