Khi bạn nâng cấp hoặc cài đặt lại gói với dpkg
(và cuối cùng là bất cứ thứ gì sử dụng nó, như apt-get, v.v.), nó sẽ sao lưu các tệp hiện có bằng cách tạo liên kết cứng tới tệp trước khi thay thế. Theo cách đó, nếu giải nén thất bại, nó có thể dễ dàng đặt lại các tệp hiện có. Điều đó thật tuyệt, vì nó bảo vệ hệ điều hành khỏi những điều xấu xảy ra.
Ngoại trừ ... nó chỉ hoạt động nếu hệ thống tập tin của bạn hỗ trợ các liên kết cứng . Không phải tất cả các hệ thống tập tin đều làm - chẳng hạn như hệ thống tập tin FAT.
Tôi đang làm việc trên một bản phân phối Debian cho một nền tảng ARM nhúng cụ thể và môi trường khởi động yêu cầu một số tệp nhất định (bao gồm kernel) nằm trên hệ thống tệp FAT để mã khởi động có thể định vị và tải chúng.
Khi bạn nâng cấp gói kernel (hoặc bất kỳ gói nào khác có tệp trong phân vùng FAT đó), cài đặt không thành công với:
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
Và toàn bộ nâng cấp thất bại.
Tôi đã lướt web và các tài liệu tham khảo duy nhất tôi có thể tìm thấy là những người cụ thể có vấn đề cụ thể khi thực hiện nâng cấp cụ thể, câu trả lời thường là "Xóa /boot/vmlinuz-3.18.11+ và thử lại", và vâng, đó là khắc phục vấn đề cụ thể đó.
Nhưng đó không phải là câu trả lời cho tôi. Tôi là nhà phân phối HĐH, không phải người dùng HĐH, vì vậy tôi cần một cách để khắc phục điều này không liên quan đến việc người dùng cuối xóa thủ công các tệp kernel của họ trước khi thực hiện nâng cấp. Tôi cần một cách để bảo dpkg "sao chép, không liên kết cứng" cho các tệp trên / boot (hoặc tất cả các tệp cho tất cả những gì tôi quan tâm, mặc dù điều đó sẽ làm chậm hoạt động nâng cấp phần nào) hoặc tốt hơn là "Nếu một liên kết cứng bị lỗi," đừng phàn nàn, thay vào đó hãy sao chép nó ".
Tôi đã thử những thứ như cờ --force-unsafe-io
và thậm chí , nhưng không có tác dụng gì.--force-all
dpkg