2

Я восстанавливал корневой раздел на основе резервной копии tar из system-rescue-cd. Все прошло хорошо, за исключением того, что отображения uid/gid на диске system-rescue-cd не совпадали с отображениями на этой системе debian, которые я восстанавливал. Это сломало несколько пакетов и разрешений setuid/setgid. Например, atjobs в спуле принадлежал bin, а не демону, а man-страницы не принадлежали man uid.

Как обнаружить и воссоздать только разрешения из архива, не запуская процесс восстановления заново?

Я обнаружил, что могу обнаружить различия uid/gid с помощью «(cd /; tar jdpf /my/backup.tar.bz2)», но теперь мне нужно отфильтровать выходные данные "Uid Отличается" и "Отличается Gid", и это не t включить каталоги в выходные данные, только файлы.

Если дисковое пространство не было проблемой, возможно, rsync мог бы сделать это, если я распаковываю на другой диск?

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

1 ответ1

0

Вы можете получить список всех команд chown для выдачи так:

tar --numeric-owner -tvjf backup.tar.bz2 | 
perl -e 'while (<STDIN>) { s|/|:|;  @t = split(" ");  print "chown $t[1] \x27$t[5]\x27\n";  }' |
tee /tmp/chown_cmds

Выход будет как:

chown 0:119 './var/cache/jockey/driverdb-OpenPrintingDriverDB.cache'
chown 0:119 './var/cache/jockey/check'
chown 0:7 './var/cache/cups/'
chown 7:7 './var/cache/cups/ppds.dat'
...

Посмотрите на /tmp/chown_cmds , убедитесь, что он выглядит хорошо, и запустите это, чтобы восстановить все uids/gids из резервной копии:

$ cd / ; sudo bash /tmp/chown_cmds

Вы можете отфильтровать файлы, принадлежащие пользователю root, чтобы сделать список намного короче.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .