การติดตั้งแพ็กเกจใหม่ด้วยไฟล์ที่หายไป / เสียหาย


17

หลังจากปิดระบบไม่สะอาดและมีสีสัน fsck ไฟล์ทั้งหมดก็หายไป ผลลัพธ์ของ 'rpm -Va' มีความยาวหลายร้อยบรรทัด (ส่วนใหญ่ไฟล์หายไป แต่ยังมีการตรวจสอบและความไม่ตรงกันอื่น ๆ ) มีวิธีง่าย ๆ ในการติดตั้งแพ็คเกจที่มีไฟล์ที่หายไปและ / หรือเสียหายหรือไม่?

ระบบปฏิบัติการที่เป็นปัญหาคือ Fedora 22


3
เป็นไปได้อย่างแน่นอน แต่ก็ค่อนข้างน่าเบื่อที่จะแยกวิเคราะห์ผลลัพธ์และสำหรับแต่ละแบบสอบถามไฟล์แพ็คเกจที่มีไฟล์นั้นและอาจต้องใช้เวลาพอสมควร ทำไมไม่ติดตั้งใหม่ทุกแพ็คเกจ? yum reinstall $(rpm -qa --qf="%{N}-%{V}\n" | sort)
doktor5000

อาจเป็นเรื่องที่ค่อนข้างน่าเกลียดที่จะกรองปัญหาเพิ่มเติมทั้งหมดที่เกิดจาก prelink ถ้าฉันไม่ผิดที่ยังคงเปิดใช้งานตามค่าเริ่มต้นบน Fedora ตามfedorahosted.org/fesco/ticket/1183
doktor5000

ฉันลงเอยด้วยการติดตั้งทุกอย่างอีกครั้ง - ปัญหาคือฉันลืมเปิดใช้งาน Keep-cache สำหรับ dnf, มันสิ้นสุดการดาวน์โหลดแพคเกจ 2gb (และฉันได้ต่ออินเทอร์เน็ต)
jaymmer - Reinstate Monica

คำตอบ:


16

เพื่อประโยชน์ในการอ้างอิงและความครบถ้วนสมบูรณ์คำสั่งหนึ่งคำสั่งที่สามารถบรรลุสิ่งที่ขอไว้ในตอนแรกจะเป็นแบบนี้ (เล่นซอด้วยกันได้อย่างรวดเร็ว แต่ทำงานได้)

rpm -qf $(rpm -Va 2>&1 | grep -vE '^$|prelink:' | sed 's|.* /|/|') | sort -u

นี่คือคำอธิบายสั้น ๆ ของส่วนต่างๆ:

rpm -Va 2>&1

จะเรียกใช้การตรวจสอบที่สมบูรณ์เกี่ยวกับแพคเกจทั้งหมดที่ติดตั้ง / แสดงอยู่ในฐานข้อมูลรอบต่อนาที นอกจากนี้ยังจะเปลี่ยนเส้นทาง stderr ไปยัง stdout เช่นเดียวกับที่นี่ในกล่องข้อผิดพลาดที่เกิดจากการเปิดใช้ prelink ถูกรายงานว่าเป็นข้อผิดพลาด แต่เราต้องการให้ stdout
ข้อควรสนใจ:จำเป็นต้องเรียกใช้ในฐานะรูทเพื่อให้สามารถตรวจสอบไฟล์สิทธิ์และเจ้าของ / กลุ่มทั้งหมด

grep -vE '^$|prelink:'

ใส่จอแสดงผลของเส้น emtpy และเช่นข้อผิดพลาด prelink นี้ (ตัวอย่างเช่นข้อผิดพลาด:
prelink: /tmp/#prelink#.B14JBi: Recorded 10 dependencies, now seeing -1)

sed 's|.* /|/|')

จะกรองrpm -Vaผลลัพธ์เพื่อแสดงชื่อไฟล์เท่านั้น

rpm -qf $()

จะสอบถามชื่อไฟล์ทั้งหมดที่ได้รับซึ่งบรรจุอยู่ในนั้นและส่งออกชื่อและรุ่นของแพ็คเกจ

| sort -u

จะหยุดการรวมชื่อแพ็คเกจ / เวอร์ชั่นซ้ำกัน

ทั้งหมดคุณจะได้รับรายการแพคเกจที่ไม่ผ่านการตรวจสอบ

rpm -Va--nodepsอาจยังคงแสดงปัญหาที่ไม่เกี่ยวข้องบางอย่างก็ยังตรวจสอบการพึ่งพาระหว่างแพคเกจซึ่งอาจจะต้องมีการปราบปรามโดยการเพิ่ม


2

ฉันเพิ่งมีปัญหาที่คล้ายกันกับไฟล์ที่หายไปใน openSUSE 13.2 และแก้ไขด้วย:

rpm -Va --nodeps --nodigest --noscripts --nosignature --nofiledigest --nosize --nomode --nordev --nouser --nogroup --nomtime\
| awk -e '($1=="missing") && ($2=="d") {system("rpm -qf "$3);}; ($1=="missing") && ($2!="d") && ($2!="c") {system("rpm -qf "$2);}'\
| sort -u | xargs zypper in -f

ตัวเลือกในการรอบต่อนาทีและการเรียกไปยัง awk มีวัตถุประสงค์เพื่อประหยัดเวลาในกรณีของฉันเพราะไม่มีความเสียหายเกิดขึ้น


1
หากไม่มีไฟล์ที่เสียหายคุณสามารถเพิ่มได้--nofilesและโดยทั่วไปจะทำเช่นเดียวกันเพราะyum check dependenciesจะตรวจสอบเฉพาะแพ็กเกจ rpm ที่ติดตั้งทั้งหมดสำหรับปัญหาการพึ่งพา --nofilesจะช่วยประหยัดเวลาได้มากสำหรับการติดตั้งที่ไม่ใช่ SSD แต่คุณจะละเว้นการตรวจสอบไฟล์ที่หายไป ... เพียงเพื่อความสมบูรณ์ และโปรดเก็บไว้ในใจถ้าคุณ grep สำหรับสตริงภาษาอังกฤษคุณอาจต้องการที่จะคำนำหน้าด้วยLC_ALL=C;)
doktor5000
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.