เมื่อคุณอัพเกรดหรือติดตั้งแพคเกจใหม่dpkg
(และท้ายที่สุดสิ่งที่ใช้มันเช่น apt-get ฯลฯ ) มันจะสำรองไฟล์ที่มีอยู่โดยการสร้างฮาร์ดลิงก์ไปยังไฟล์ก่อนที่จะแทนที่มัน ด้วยวิธีนี้หากการคลายแพ็กล้มเหลวจะสามารถนำไฟล์ที่มีอยู่กลับมาได้อย่างง่ายดาย เยี่ยมมากเพราะมันช่วยปกป้องระบบปฏิบัติการจากสิ่งที่เกิดขึ้น Bad Things ™
ยกเว้น ... มันจะทำงานเฉพาะถ้าระบบแฟ้มของคุณสนับสนุนการเชื่อมโยงอย่างหนัก ระบบไฟล์ทั้งหมดไม่ได้ทำเช่นระบบไฟล์ FAT
ฉันกำลังทำงานกับการแจกจ่าย Debian สำหรับแพลตฟอร์ม ARM ที่ฝังตัวเฉพาะและสภาพแวดล้อมการบูตต้องการไฟล์บางอย่าง (เคอร์เนลที่รวมอยู่) อยู่บนระบบไฟล์ FAT ดังนั้นรหัสการบูตสามารถค้นหาและโหลดได้
เมื่อคุณไปอัพเกรดแพ็คเกจเคอร์เนล (หรือแพ็คเกจอื่น ๆ ที่มีไฟล์ในพาร์ติชัน FAT นั้น) การติดตั้งจะล้มเหลวด้วย:
dpkg: error processing archive linux-image3.18.11+_3.18.11.2.armadillian_armhf.deb (--install):
unable to make backup link of `./boot/vmlinuz-3.18.11+' before installing new version: Operation not permitted
และการอัปเกรดทั้งหมดล้มเหลว
ฉัน scoured เว็บและการอ้างอิงเดียวที่ฉันสามารถหาได้คือคนที่มีปัญหาเฉพาะเมื่อทำการอัพเกรดเฉพาะคำตอบที่มักจะ "ลบ / บูต / vmlinuz-3.18.11+ และลองอีกครั้ง" และใช่ว่า แก้ไขปัญหาเฉพาะที่
แต่นั่นไม่ใช่คำตอบสำหรับฉัน ฉันเป็นผู้จัดจำหน่ายระบบปฏิบัติการไม่ใช่ผู้ใช้ระบบปฏิบัติการดังนั้นฉันต้องการวิธีแก้ไขปัญหานี้ซึ่งไม่เกี่ยวข้องกับผู้ใช้ปลายทางด้วยการลบไฟล์เคอร์เนลด้วยตนเองก่อนทำการอัปเกรด ฉันต้องการวิธีบอก dpkg ให้กับ "copy, not hard link" สำหรับไฟล์ที่อยู่ใน / boot (หรือไฟล์ทั้งหมดสำหรับทุกสิ่งที่ฉันสนใจแม้ว่ามันจะทำให้การอัปเกรดช้าลงบ้าง) หรือดีกว่า "ถ้าฮาร์ดลิงก์ล้มเหลว อย่าบ่นแค่คัดลอกแทน "
ฉันได้ลองสิ่งต่าง ๆ เช่น--force-unsafe-io
และแม้จะติด--force-all
ธงdpkg
แต่ก็ไม่มีผลใด ๆ