ค้นหาเว็บไซต์

วิธีสร้างฐานข้อมูล RPM ที่เสียหายใหม่ใน CentOS


ฐานข้อมูล RPM ประกอบด้วยไฟล์ภายใต้ไดเร็กทอรี /var/lib/rpm/ ใน CentOS และการกระจาย Linux องค์กรอื่นๆ เช่น RHEL, openSUSE, Oracle Linux และอีกมากมาย

หากฐานข้อมูล RPM เสียหาย RPM จะทำงานไม่ถูกต้อง ดังนั้นจึงไม่สามารถใช้การอัปเดตกับระบบของคุณได้ คุณพบข้อผิดพลาดขณะอัปเดตแพ็คเกจบนระบบของคุณผ่านตัวจัดการแพ็คเกจ YUM สถานการณ์กรณีที่เลวร้ายที่สุดคือไม่สามารถเรียกใช้คำสั่ง rpm และ yum ใด ๆ ได้สำเร็จ

อ่านเพิ่มเติม: 20 ตัวอย่างการใช้งานจริงของคำสั่ง RPM ใน Linux

มีปัจจัยหลายประการที่อาจนำไปสู่ความเสียหายของฐานข้อมูล RPM เช่น ธุรกรรมก่อนหน้านี้ที่ไม่สมบูรณ์ การติดตั้งซอฟต์แวร์ของบริษัทภายนอกบางตัว การลบแพ็คเกจเฉพาะ และอื่นๆ อีกมากมาย

ในบทความนี้ เราจะแสดงวิธีสร้างฐานข้อมูล RPM ที่เสียหายขึ้นมาใหม่ วิธีนี้คุณสามารถกู้คืนจากความเสียหายของฐานข้อมูล RPM ใน CentOS สิ่งนี้ต้องการสิทธิ์ผู้ใช้รูท มิฉะนั้นให้ใช้คำสั่ง sudo เพื่อรับสิทธิ์เหล่านั้น

สร้างฐานข้อมูล RPM ที่เสียหายใหม่ใน CentOS

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

mkdir /backups/
tar -zcvf /backups/rpmdb-$(date +"%d%m%Y").tar.gz  /var/lib/rpm

ถัดไป ตรวจสอบความสมบูรณ์ของไฟล์ข้อมูลเมตาของแพ็กเกจหลัก /var/lib/rpm/Packages; นี่คือไฟล์ที่ต้องการสร้างใหม่ แต่ก่อนอื่นให้ลบไฟล์ /var/lib/rpm/__db* เพื่อป้องกันการล็อคเก่าโดยใช้คำสั่งต่อไปนี้

rm -f /var/lib/rpm/__db*		
/usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages

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


cd /var/lib/rpm/
mv Packages Packages.back
/usr/lib/rpm/rpmdb_dump Packages.back | /usr/lib/rpm/rpmdb_load Packages
/usr/lib/rpm/rpmdb_verify Packages

ตอนนี้เพื่อตรวจสอบส่วนหัวของฐานข้อมูล ให้ค้นหาแพ็คเกจที่ติดตั้งทั้งหมดโดยใช้แฟล็ก -q และ -a และพยายามสังเกตข้อผิดพลาดใด ๆ ที่ส่งไปยัง อย่างระมัดระวัง stderror.


rpm -qa >/dev/null	#output is discarded to enable printing of errors only

สุดท้ายแต่ไม่ท้ายสุด สร้างฐานข้อมูล RPM ใหม่โดยใช้คำสั่งต่อไปนี้ ตัวเลือก -vv ช่วยให้สามารถแสดงข้อมูลการดีบักจำนวนมากได้

rpm -vv --rebuilddb

ใช้เครื่องมือ dcrpm เพื่อตรวจจับและแก้ไขฐานข้อมูล RPM

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

คุณสามารถติดตั้งได้จากแหล่งที่มา ดาวน์โหลดแผนผังต้นทางและติดตั้งโดยใช้ setup.py (ซึ่งควรคว้าการพึ่งพา psutil จาก pypi เช่นกัน) ดังที่แสดง

git clone https://github.com/facebookincubator/dcrpm.git
cd dcrpm
python setup.py install

เมื่อคุณติดตั้ง dcrpm แล้ว ให้รันตามที่แสดง

dcrpm

สุดท้าย ให้ลองเรียกใช้คำสั่ง rpm หรือ yum ที่ล้มเหลวอีกครั้งเพื่อดูว่าทุกอย่างทำงานได้ดีหรือไม่

พื้นที่เก็บข้อมูล dcrpm Github: https://github.com/facebookincubator/dcrpm
คุณสามารถค้นหาข้อมูลเพิ่มเติมได้จากหน้าการกู้คืนฐานข้อมูล RPM

นั่นคือทั้งหมด! ในบทความนี้ เราได้อธิบายวิธีสร้างฐานข้อมูล RPM ที่เสียหายใน CentOS ขึ้นมาใหม่ หากต้องการถามคำถามหรือแบ่งปันความคิดเห็นเกี่ยวกับคู่มือนี้ ให้ใช้แบบฟอร์มคำติชมด้านล่าง