| 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
|
на баш не работает конкретнокоторая в текстовом потоке добавляет в конец пустую строку (необходима для следующего этапа действия)можно заменить например на ну или что-то более красившее под башем
|