Rescue system/Live bootable from systemd-boot

Для этого можно использовать программы архивирования (, хотя это не так чисто и легко ). Обратите внимание, что метаданные (режим разрешений, владелец, группа, дата/время изменения и т. д. )фактических файлов (в файловой системе )хранятся в inode (т. е. «системные данные» ), но метаданные заархивированного файла (s )хранятся как пользовательские данные в файле архива. Обычно ими можно манипулировать с различной степенью сложности.

Я приведу пример с cpio; аналогичные эффекты, вероятно, могут быть достигнуты с другими программами архивирования, например, ar, tar, pax, семейство zipи т. д. Сначала создайте файл tmp.txtс известной датой/временем модификации. (для воспроизводимости ); затем создайте архив cpio, содержащий только этот файл. Варианты cpioвключают oдля или вывода. (значит cpioбудет писать архив )и cдля использования переносимого(c совместимого )формата, которым может быть легче манипулировать.

$ touch -d "7/12/2017 00:00" tmp.txt

$ ls -l tmp.txt
-rw-r--r-- 1 myusername mygroupname  0 Jul 12 00:00 tmp.txt

$ echo tmp.txt | cpio -oc > tmp.cpio
1 block

Проверьте архив. cpio -itvозначает чтение архива(i nput )и производят v эрбозу t способность содержания.

$ cpio -itv < tmp.cpio
-rw-r--r--   1 myusername  mygroupname  0 Jul 12 00:00 tmp.txt
1 block

$ cat tmp.cpio
070701000595CC000081A4000303E900030201000000015965668000000000000068E70000C36100
000000000000000000000800000000tmp.txt0707010000000000000000000000000000000000000
0010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!

Я обнаружил с помощью реверс-инжиниринга (это может быть где-то задокументировано; не проверял )что дата/время модификации первого файла в архиве хранится как время Unix (32 -битное целое число представляющее количество секунд с 01.01.1970 00 :00GMT ), отформатирован как восьмизначный -шестнадцатеричный номер с позициями символов 47 -54. Я выделил значение 59656680выше. Как только вы узнаете, что это время Unix, отформатированное как восьмизначное шестнадцатеричное число -, найти не сложно. Вы можете получить текущее время Unix (в десятичном виде )с помощью команды date +%s, и вы можете получить его как шестнадцатеричный, сказав

(date +%s; echo "16op") | dc

Теперь, чтобы изменить метаданные! Отредактируйте архив с помощью редактора по вашему выбору:

$ vi tmp.cpio
0707010005807C000081A4000303E900030201000000015965668000000000000068E70000C36100
000000000000000000000800000000tmp.txt^@^@^@0707010000000000000000000000000000000
0000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER
!!!^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
~
~
~
~
~
"tmp.cpio" [Incomplete last line] 1 line, 512 characters

Выясните, на что вы хотите его изменить. В своем вопросе вы упомянули о переводе часов на год назад. Ну, количество секунд в нормальном, 365 -дневном году 365×24×60×60 = 31536000 (десятичное )= 1E13380 (шестнадцатеричное ). Итак, вычтите 59656680−1E13380; результат 57843300. И изменить его в файле:

0707010005807C000081A4000303E900030201000000015784330000000000000068E70000C36100
000000000000000000000800000000tmp.txt^@^@^@0707010000000000000000000000000000000
0000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER
!!!^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
~
~
~
~
~
"tmp.cpio" [Incomplete last line] 1 line, 512 characters

Сохраните и выйдите. Проверьте свои изменения:

$ cat tmp.cpio
070701000595CC000081A4000303E900030201000000015784330000000000000068E70000C36100
000000000000000000000800000000tmp.txt0707010000000000000000000000000000000000000
0010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!

$ cpio -itv < tmp.cpio
-rw-r--r--   1 myusername  mygroupname  0 Jul 12  2016 tmp.txt
1 block

$ cpio -imuv < tmp.cpio
tmp.txt
1 block

$ ls -l tmp.txt
-rw-r--r-- 1 myusername mygroupname  0 Jul 12  2016 tmp.txt

и о чудо :вы изменили дату/время модификации вашего файла.(cpio -iбез tчитает архив и извлекает файлы; -mвосстанавливает м время модификации; -uозначает u nconditional (без этой опции, cpioне перезаписывает более новый файл более старым файлом ); и, как обычно, -vозначает v erbose (отображать имена файлов ).)

Примечания:

  • Вы можете получить дату Unix (количество секунд бла-бла-бла )для удобочитаемой даты -с помощью команды типа date -d "Jan 1, 2001" +%s. Используйте трюк с настольным калькуляторомdc(), который я показал ранее, чтобы преобразовать его в шестнадцатеричный формат.
  • Формат архива cpio включает нулевые байты. Текущая версия vi(vim), похоже, учитывает те (т. е. потерпеть их и оставить в покое ). Другие редакторы, включая старые версии vi, может повредить такие файлы (, удалив нули ), или даже отказаться редактировать их.
  • viобнаруживает, что архив cpio заканчивается с символом, отличным от новой строки («[Неполная последняя строка]» ). Когда он сохраняет файл, он добавляет новую строку. Другие программы архивации (, отличные отcpio)может определить это как фальсификацию и может отказаться принимать измененный архив.
  • Другие форматы архивов могут хранить метаданные (, такие как дата/время модификации )в двоичном формате и/или контрольные суммы. Редактирование таких файлов может быть более сложным, чем то, что я описал здесь.
0
18.09.2019, 16:39
1 ответ

System Rescue Cd -Я использую его для восстановления ОС клиента. Вы также можете добавить к нему.

Работает для Linux и Windows. Я очень рекомендую это. Есть все, что вы просили, и даже немного.

SystemRescueCd — это диск восстановления системы Linux, доступный в виде загрузочного компакт-диска -ПЗУ или USB-накопителя для администрирования или восстановления вашей системы и данных после сбоя. Он призван обеспечить простой способ выполнения задач администратора на вашем компьютере, таких как создание и редактирование разделов жесткого диска. Он поставляется с множеством системных утилит Linux, таких как GParted, fsarchiver, инструменты файловой системы и базовые инструменты (, редакторы, midnight Commander, сетевые инструменты ). Его можно использовать как для компьютеров с Linux и Windows, так и для настольных компьютеров и серверов. Эта аварийная система не требует установки, так как ее можно загрузить с CD/DVD-привода или USB-накопителя, но при желании ее можно установить на жесткий диск. Ядро поддерживает все важные файловые системы (ext3/ext4, xfs, btrfs, reiserfs, jfs, vfat, ntfs ), а также сетевые файловые системы, такие как Samba и NFS.

0
28.01.2020, 03:16

Теги

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