जब आप किसी पैकेज को अपग्रेड करते हैं या dpkg
(और आखिरकार इसका उपयोग करने वाले कुछ भी, जैसे कि apt-get etc) से इसे पुनः स्थापित करने से पहले फाइल की हार्ड लिंक बनाकर मौजूदा फाइलों का बैकअप ले लेते हैं। इस तरह से अगर अनपैक विफल हो जाता है तो यह आसानी से मौजूदा फाइलों को वापस रख सकता है। यह बहुत अच्छा है, क्योंकि यह ऑपरेटिंग सिस्टम को बैड थिंग्स ™ से बचाता है।
सिवाय ... यह तभी काम करता है जब आपका फाइलसिस्टम हार्ड लिंक का समर्थन करता है । सभी फाइलसिस्टम ऐसा नहीं करते - जैसे कि FAT फाइलसिस्टम।
मैं एक विशिष्ट एम्बेडेड 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
और पूरा अपग्रेड फेल हो जाता है।
मैंने वेब को स्कैन कर लिया है, और एकमात्र संदर्भ जो मुझे मिल सकता है, विशिष्ट उन्नयन करते समय विशिष्ट लोगों के साथ विशिष्ट लोग हैं, जिसका उत्तर आमतौर पर "/boot/vmlinuz-3.18.11+ हटाएं और फिर से प्रयास करें", और हां, उस विशिष्ट समस्या को ठीक करता है।
लेकिन मेरे लिए वह जवाब नहीं है। मैं एक ओएस वितरक हूं, ओएस उपयोगकर्ता नहीं है, इसलिए मुझे इसे ठीक करने के लिए एक तरीका चाहिए जो एक नवीनीकरण करने से पहले अपने कर्नेल फ़ाइलों को मैन्युअल रूप से हटाने में अंतिम उपयोगकर्ता को शामिल नहीं करता है। मुझे dpkg को "कॉपी करने के लिए, हार्ड लिंक नहीं" / बूट (या सभी सभी देखभाल के लिए सभी फ़ाइलों के लिए) को बताने का एक तरीका चाहिए, हालांकि यह अपग्रेड ऑपरेशन को कुछ हद तक धीमा कर देगा), या बेहतर अभी तक "यदि कोई हार्ड लिंक विफल रहता है, तो शिकायत न करें, बस इसे कॉपी करें "।
मैंने इस तरह की चीजों की कोशिश की है --force-unsafe-io
और यहां तक कि --force-all
झंडे भी हैं dpkg
, लेकिन कुछ भी प्रभाव नहीं है।