indeviral |
|
Темы:
38
Сообщения:
3165
Участник с: 10 августа 2013
|
vs220 ну да, такое есть... в таком случаи я брал только первое, возможно в некоторых случаях это будет критично(( но таких пересечений в официальном репозитории не так уж и много. vs220вполне возможно, но я не встречал
Ошибки в тексте-неповторимый стиль автора©
|
vasek |
|
Темы:
48
Сообщения:
11320
Участник с: 17 февраля 2013
|
Я бы, в случае аналогичной проблемы и отсутствия файла pacman.log проделал бы все проще. Приведу подробный разбор, возможно что то похожее когда-нибудь и пригодится. Делаю на системе при наличии данных папок - но если бы они были удалены и после этого ничего бы на диск не записывалось, то принцип тот же самый - информация на диске не пропала, исчезли просто имена файлов, а информация вся на месте. Главное узнать начало файлов /var/lib/pacman/local/<paket>/desc, у которых первые две строчки равны Узнать можно используя дисковый редактор, например, DMDE, а можно и методом тыка (интуитивно) - правда не всегда все так гладко, нужен опыт и интуиция. Но мы все-таки попробуем данный способ.Итак, приступим. Предположение - так как файлы находятся в директории /var/lib/pacman/, то разумно предположить, что номера блоков с файлами будут поблизости от блока с инодой, соответствующей директории /var/lib/pacman/ - или после или до ... Узнаем иноду /var/lib/pacman stat /var/lib/pacman | grep Инода Устройство: 803h/2051d Инода: 1835014 Ссылки: 4 Узнаем блок занимаемый иноде 1835014 sudo debugfs -R "blocks <1835014>" /dev/sda3 7348261 ….. (7348261*4096=30098477056) Начинаем поиск методом тыка - начнем поиск со смещения 30098477056 sudo hexdump -C -s 30098477056 -n 1000K /dev/sda3 | grep %NAME% …. мимо ….. пробуем увеличим выборку (добавим 1 нолик) sudo hexdump -C -s 30098477056 -n 10000K /dev/sda3 | grep %NAME% …. опять мимо, пробуем опять увеличим выборку (добавим еще 1 нолик) sudo hexdump -C -s 30098477056 -n 100000K /dev/sda3 | grep %NAME% Поймали, уточняем с количеством пакетовsudo hexdump -C -s 0x708023000 -n 1000K /dev/sda3 | grep %NAME% | wc -l 44 sudo hexdump -C -s 0x708023000 -n 10000K /dev/sda3 | grep %NAME% | wc -l 361 sudo hexdump -C -s 0x708023000 -n 100000K /dev/sda3 | grep %NAME% | wc -l 661 sudo hexdump -C -s 0x708023000 -n 200000K /dev/sda3 | grep %NAME% | wc -l 661 Можно и остановится, значение 661 не увеличивается - ну и делаем вывод в файл sudo hexdump -C -s 0x708023000 -n 100000K /dev/sda3 | grep %NAME% > ~/pkg.txt Но неплохо бы проверить до смещения 30098477056, пробуем sudo hexdump -C -s 30100000000 -n 100000K /dev/sda3 | grep %NAME% Отловили ту же самую строку708023000 25 4e 41 4d 45 25 0a 66 6f 72 65 6d 6f 73 74 0a |%NAME%.foremost.| Будем считать, что ДО ничего нет. Приступим к обработке полученного файла ~/pkg.txt - преобразуем его в удобный вид Удаляем все до фразы "*%NAME%.", включая саму фразу sed 's|.*%NAME%.||' ~/pkg.txt > ~/pkg1.txt Удаляем все после точки, включая саму точку (если точки нет, останется символ | , означающий что имя файла не полное sed -r 's/\..+//' ~/pkg1.txt > ~/pkg2.txt Получили файл следующего вида cat ~/pkg2.txt | head -3
PS - Остается дополнить полное имя опредеденных пакетов, которых 286 штук grep "|" ~/pkg2.txt | wc -l 286 Но делается это легко - пример cat ~/pkg.txt | grep harfbuzz 708025000 25 4e 41 4d 45 25 0a 68 61 72 66 62 75 7a 7a 2d |%NAME%.harfbuzz-| 7085f3000 25 4e 41 4d 45 25 0a 68 61 72 66 62 75 7a 7a 0a |%NAME%.harfbuzz.| и уточняем полное имя пакета sudo hexdump -C -s 0x708025000 -n 32 /dev/sda3 708025000 25 4e 41 4d 45 25 0a 68 61 72 66 62 75 7a 7a 2d |%NAME%.harfbuzz-| 708025010 69 63 75 0a 0a 25 56 45 52 53 49 4f 4e 25 0a 32 |icu..%VERSION%.2| то есть полное имя пакета harfbuzz-icu Как то так - вообщем то и не долго.
Ошибки не исчезают с опытом - они просто умнеют
|
nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
vasek, пакеты могут достаточно часто добавляться/удаляться, твой вариант может восстановить и то что не нужно (было удалено).
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
vasek |
|
Темы:
48
Сообщения:
11320
Участник с: 17 февраля 2013
|
nafanjaСогласен, но это уже издержки. Другого простого и лучшего пути не вижу. Насколько я понимаю в данном случае важна информация и, конечно не 100% , о пакетах, стоящих в системе. Плюс к этому, не забываем, что здесь будут и пакеты, установленные как зависимости других пакетов. PS - Просто привел в качестве примера, как можно восстановить определенную информацию (и даже файлы) ручным методом.
Ошибки не исчезают с опытом - они просто умнеют
|
vasek |
|
Темы:
48
Сообщения:
11320
Участник с: 17 февраля 2013
|
Погуглил на en - оказывается есть Wiki Pacman/Restore local database - привожу цитату из нее PS - скрипт Xyne's package detection scriptEDIT 1 - рекомендую заглянуть в китайскую и японскую версии Wiki - есть отличия
Ошибки не исчезают с опытом - они просто умнеют
|
red |
|
Темы:
30
Сообщения:
1517
Участник с: 31 августа 2011
|
indeviralну а почему бы им там не быть, на сколько я знаю если вручную его не удалять то история должна вестись от а на счет парсера, то я так и сделал, результат выложу ниже vasek в общем заработало после установки пакета lib32-glibcvasekспасибо за подробное описание, возможно действительно когда нибудь пригодится, но так как файл pacman.log присутствует то на данный момент его разбор представляется наилучшим решением vasekда, vall уже упоминал об этом |
red |
|
Темы:
30
Сообщения:
1517
Участник с: 31 августа 2011
|
привожу своё решение условие: должен быть в наличии файл /var/log/pacman.log в котором содержаться непрерывная история с начала установки системы и до текущего момента (если вы его спецом не удаляли и не чистили то по умолчанию так оно есть) Первый этап
здесь мы разбираем pacman.log и собираем список только тех пакетов которые были установлены и присутствуют в системе на данный момент.Второй этап отделяем зерна от плевел, то есть вычленяем те пакеты которые установлены помимо репозиториев указанных в /etc/pacman.confТретий этап пакеты которые установлены из репозиториев указанных в /etc/pacman.confЧетвертый этап переустанавливаем пакеты из рапозиториев переустанавливаем пакеты из АУРа, для упрощения воспользуемся одним из помощников по АУРу(AUR helper) утилитой yayв принципе последние три этапа можно было бы при желании объединить в но для большего контроля и понимания я их разделилиз минусов некоторые(?) конфиги могут слететь, например .zshrc (как я понял сам пакет zsh его не трогал а задела переустановка каких-то сопутствующих пакетов, в общем надо разбираться) |
vasek |
|
Темы:
48
Сообщения:
11320
Участник с: 17 февраля 2013
|
redawk '$4=="installed" || $4=="removed" {print i++,$4,$5}' /var/log/pacman.log |sort -k3 -k1n |cat - это работает (но очень много файлов, примерно 1700) А вот при передаче на 2-ую часть что то у меня не сработало (пустой вывод после передачи <<< '' |awk '{if (a=="installed" && b!=$3) print b;a=$2;b=$3}') - разбираться не стал Посмотрел китайский скрипт (показало около 900 файлов) - но все проверять не стал, просто посмотрел мельком - в принципе понравилось.
Ошибки не исчезают с опытом - они просто умнеют
|
red |
|
Темы:
30
Сообщения:
1517
Участник с: 31 августа 2011
|
vasek я тестил под zsh, ща попробовал под баш и получил пустой вывод как у тебя, чуть позже разберусь и подправлю |
red |
|
Темы:
30
Сообщения:
1517
Участник с: 31 августа 2011
|
на баш не работает конкретно которая в текстовом потоке добавляет в конец пустую строку (необходима для следующего этапа действия)можно заменить например на ну или что-то более красившее под башем
|