升級時出現 dpkg 錯誤:未找到 dpkg-preconfigure
我正在執行 Ubuntu 伺服器 16.04.3。我啟用了安全更新的自動安裝。今天早上,伺服器被關閉(不知道為什麼,它應該正在執行)。重新啟動後,我嘗試使用
apt-get dist-upgrade
. 它給了我以下錯誤:Fetched 351 kB in 0s (1 760 kB/s) /bin/sh: 1: /usr/sbin/dpkg-preconfigure: not found dpkg: warning: files list file for package 'libpam-runtime' missing; assuming package has no files currently installed dpkg: warning: files list file for package 'python3.5' missing; assuming package has no files currently installed dpkg: warning: files list file for package 'libpython3-stdlib:amd64' missing; assuming package has no files currently installed dpkg: warning: files list file for package 'makedev' missing; assuming package has no files currently installed dpkg: warning: files list file for package 'libnettle6:amd64' missing; assuming package has no files currently installed dpkg: unrecoverable fatal error, aborting: unable to open files list file for package 'libicu55:amd64': No such device or address E: Sub-process /usr/bin/dpkg returned an error code (2)
然後我假設伺服器因未知原因關閉時正在安裝某些東西。我試過了
apt-get install -f
。它給了我以下資訊:/bin/sh: 1: /usr/sbin/dpkg-preconfigure: not found Setting up linux-firmware (1.157.16) ... /usr/sbin/update-initramfs: 233: /usr/sbin/update-initramfs: linux-version: not found dpkg: error processing package linux-firmware (--configure): subprocess installed post-installation script returned error exit status 127 Errors were encountered while processing: linux-firmware E: Sub-process /usr/bin/dpkg returned an error code (1)
dpkg-preconfigure 存在於系統上
root@lelouch:~# whereis dpkg-preconfigure dpkg-preconfigure: /usr/sbin/dpkg-preconfigure /usr/share/man/man8/dpkg-preconfigure.8.gz
linux-version 也存在但無法執行
root@lelouch:~# whereis linux-version linux-version: /usr/bin/linux-version /usr/share/man/man1/linux-version.1.gz root@lelouch:~# /usr/bin/linux-version bash: /usr/bin/linux-version: /usr/bin/perl: bad interpreter: No such file or directory
dpkg -C 給出以下
root@lelouch:~# dpkg -C The following packages are only half configured, probably due to problems configuring them the first time. The configuration should be retried using dpkg --configure <package> or the configure menu option in dselect: linux-firmware Firmware for Linux kernel drivers The following packages are missing the list control file in the database, they need to be reinstalled: libc-bin GNU C Library: Binaries libdns-export162 Exported DNS Shared Library libgtk2.0-common common files for the GTK+ graphical user interface librar libidn11:amd64 GNU Libidn library, implementation of IETF IDN specificat libisc-export160 Exported ISC Shared Library libncursesw5:amd64 shared libraries for terminal handling (wide character su libnettle6:amd64 low level cryptographic library (symmetric and one-way cr libnewt0.52:amd64 Not Erik's Windowing Toolkit - text mode windowing with s libnih1:amd64 NIH Utility Library libp11-kit0:amd64 library for loading and coordinating access to PKCS#11 mo libpam-modules:amd64 Pluggable Authentication Modules for PAM libpam-modules-bin Pluggable Authentication Modules for PAM - helper binarie libpam-runtime Runtime support for the PAM library libpam0g:amd64 Pluggable Authentication Modules library libpcre3:amd64 Perl 5 Compatible Regular Expression Library - runtime fi libpng12-0:amd64 PNG library - runtime libpopt0:amd64 lib for parsing cmdline parameters libprocps4:amd64 library for accessing process information from /proc libpython3-stdlib:amd64 interactive high-level object-oriented language (default libpython3.5:amd64 Shared Python runtime library (version 3.5) libreadline6:amd64 GNU readline and history libraries, run-time libraries libseccomp2:amd64 high level interface to Linux seccomp filter libselinux1:amd64 SELinux runtime shared libraries libsemanage-common Common files for SELinux policy management libraries libsemanage1:amd64 SELinux policy management library libsepol1:amd64 SELinux library for manipulating binary security policies libslang2:amd64 S-Lang programming library - runtime version libsqlite3-0:amd64 SQLite 3 shared library libssl1.0.0:amd64 Secure Sockets Layer toolkit - shared libraries libtasn1-6:amd64 Manage ASN.1 structures (runtime) libtext-charwidth-perl get display widths of characters on the terminal libustr-1.0-1:amd64 Micro string library: shared library libuuid1:amd64 Universally Unique ID library libxtables11:amd64 netfilter xtables library linux-base Linux image base package login system login tools logrotate Log rotation utility lsb-base Linux Standard Base init script functionality lsb-release Linux Standard Base version reporting utility makedev creates device files in /dev mawk a pattern scanning and text processing language mime-support MIME files 'mime.types' & 'mailcap', and support programs mount tools for mounting and manipulating filesystems ncurses-bin terminal-related programs and man pages net-tools NET-3 networking toolkit netbase Basic TCP/IP networking system netcat-openbsd TCP/IP swiss army knife python3.5 Interactive high-level object-oriented language (version systemd system and service manager udev /dev/ and hotplug management daemon The following packages are missing the md5sums control file in the database, they need to be reinstalled: libncursesw5:amd64 shared libraries for terminal handling (wide character su libnettle6:amd64 low level cryptographic library (symmetric and one-way cr libnewt0.52:amd64 Not Erik's Windowing Toolkit - text mode windowing with s libnih1:amd64 NIH Utility Library libp11-kit0:amd64 library for loading and coordinating access to PKCS#11 mo libpam-modules:amd64 Pluggable Authentication Modules for PAM libpam-modules-bin Pluggable Authentication Modules for PAM - helper binarie libpam-runtime Runtime support for the PAM library libpam0g:amd64 Pluggable Authentication Modules library libpcre3:amd64 Perl 5 Compatible Regular Expression Library - runtime fi libpng12-0:amd64 PNG library - runtime libpopt0:amd64 lib for parsing cmdline parameters libprocps4:amd64 library for accessing process information from /proc libpython3-stdlib:amd64 interactive high-level object-oriented language (default libreadline6:amd64 GNU readline and history libraries, run-time libraries libselinux1:amd64 SELinux runtime shared libraries libsemanage-common Common files for SELinux policy management libraries libsemanage1:amd64 SELinux policy management library libsepol1:amd64 SELinux library for manipulating binary security policies libslang2:amd64 S-Lang programming library - runtime version libsmartcols1:amd64 smart column output alignment library libsqlite3-0:amd64 SQLite 3 shared library libss2:amd64 command-line interface parsing library libtext-charwidth-perl get display widths of characters on the terminal libtxc-dxtn-s2tc0:amd64 Texture compression library for Mesa libustr-1.0-1:amd64 Micro string library: shared library libuuid1:amd64 Universally Unique ID library linux-base Linux image base package login system login tools logrotate Log rotation utility lsb-base Linux Standard Base init script functionality lsb-release Linux Standard Base version reporting utility makedev creates device files in /dev mawk a pattern scanning and text processing language mime-support MIME files 'mime.types' & 'mailcap', and support programs mount tools for mounting and manipulating filesystems ncurses-base basic terminal type definitions ncurses-bin terminal-related programs and man pages net-tools NET-3 networking toolkit netbase Basic TCP/IP networking system netcat-openbsd TCP/IP swiss army knife
我猜斷電把一切都搞砸了。關於它的一點背景。伺服器位於由 proxmox 執行的 VM 中。磁碟映像 (dcow2) 已損壞。我不得不使用 proxmox 工具 (
qemu-img check -r all /var/lib/vz/images/100/vm-100-disk-1.qcow2
) 修復它。然後,我不得不恢復蠐螬,因為它似乎已被損壞。最後,我不得不執行一個,fsck -r
因為伺服器在抱怨:EXT4-fs error (device sda3): ext4_iget:4245: inode #1835722: comm rs:main Q:Reg: bad_extra_isize (20725 != 256)
. fsck 後,系統執行良好,儲存在其上的文件似乎沒有損壞。VM 主機上的任何日誌都無法說明發生了什麼。在伺服器上,伺服器崩潰時沒有系統日誌。但是,unattended-upgrades-dpkg.log 顯示以下內容,之後沒有任何內容,因此它可能與崩潰有關:
Log started: 2018-02-15 06:35:35 (Reading database ... ^M(Reading database ... 5%^M(Reading database ... 10%^M(Reading database ... 15%^M(Reading database ... 20%^M(Reading database ... 25%^M(Reading database ... 30%^M(Reading database \ ... 35%^M(Reading database ... 40%^M(Reading database ... 45%^M(Reading database ... 50%^M(Reading database ... 55%^M(Reading database ... 60%^M(Reading database ... 65%^M(Reading database ... 70%^M(Read\ ing database ... 75%^M(Reading database ... 80%^M(Reading database ... 85%^M(Reading database ... 90%^M(Reading database ... 95%^M(Reading database ... 100%^M(Reading database ... 109727 files and direct\ ories currently installed.)^M Preparing to unpack .../libvorbisenc2_1.3.5-3ubuntu0.1_amd64.deb ...^M Unpacking libvorbisenc2:amd64 (1.3.5-3ubuntu0.1) over (1.3.5-3) ...^M Preparing to unpack .../libvorbis0a_1.3.5-3ubuntu0.1_amd64.deb ...^M Unpacking libvorbis0a:amd64 (1.3.5-3ubuntu0.1) over (1.3.5-3) ...^M Preparing to unpack .../linux-firmware_1.157.16_all.deb ...^M Unpacking linux-firmware (1.157.16) over (1.157.14) ...^M Processing triggers for libc-bin (2.23-0ubuntu10) ...^M Setting up libvorbis0a:amd64 (1.3.5-3ubuntu0.1) ...^M Setting up libvorbisenc2:amd64 (1.3.5-3ubuntu0.1) ...^M Setting up linux-firmware (1.157.16) ...^M update-initramfs: Generating /boot/initrd.img-4.4.0-112-generic^M W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.^M
Mdadm 看起來像這樣:
# mdadm.conf # # Please refer to mdadm.conf(5) for information about this file. # # by default (built-in), scan all partitions (/proc/partitions) and all # containers for MD superblocks. alternatively, specify devices to scan, using # wildcards if desired. #DEVICE partitions containers # auto-create devices with Debian standard permissions CREATE owner=root group=disk mode=0660 auto=yes # automatically tag new arrays as belonging to the local system HOMEHOST <system> # instruct the monitoring daemon where to send mail alerts MAILADDR root # definitions of existing MD arrays # This file was auto-generated on Sat, 10 Feb 2018 17:09:37 +0100 # by mkconf $Id$
有人會知道如何解決嗎?
磁碟映像損壞是相當不尋常的……
鑑於您需要重新安裝的軟體包數量,以及許多基本軟體包受到影響的事實,我認為是時候從其他地方的 VM 備份您需要的任何文件,並從頭開始創建一個新 VM。與嘗試修復目前 VM 相比,這極有可能花費更少的時間。