Tôi đã thấy một lỗi tương tự ngày hôm nay trên một máy tính xách tay chạy Ubuntu 15.10 mà tôi luôn cập nhật nhưng đã không khởi động lại trong một tháng cho đến khi tôi muốn kiểm tra hạt nhân hiện tại (có thể có một sự thay đổi gần đây).
Dù sao, tôi thấy rằng trong trường hợp của tôi, nguyên nhân cơ bản thực sự là một phân vùng trao đổi "bị thiếu" do trục trặc thiết lập khi làm theo hướng dẫn ở trên. Nếu đây là trường hợp và / hoặc bạn đang thực sự sử dụng lvm
, bạn có thể bỏ qua bước 2 bên dưới. Tất nhiên, bạn cũng có thể thấy thông báo lỗi ở trên trong trường hợp phân vùng hệ thống (hoặc dữ liệu thứ cấp) của bạn bị hỏng hoặc không thể tìm thấy (xem bước 3).
Bước 1: Gắn hệ thống của bạn, khởi động các phân vùng theo hướng dẫn đã nói ở trên
Hãy nói rằng (ext2) phân vùng khởi động của bạn là / dev / sdX1, (mã hóa) phân vùng swap của bạn là / dev / sdX2, (mã hóa) phân vùng dữ liệu của bạn là / dev / sdX3 và bạn đã giải mã thành công sau này sử dụng cryptsetup luksOpen /dev/sdX3 data
, tiếp theo là gắn nó : mkdir /tmp/data; mount /dev/mapper/data /tmp/data
.
Hãy chú ý đến các liên kết gắn kết trong hướng dẫn và đảm bảo gắn kết / dev / sdX1 để bạn có thể truy cập nó từ thư mục khởi động / phân vùng hệ thống của bạn (điều này rất quan trọng khi chúng ta phải thực thi update-initramfs
).
Sau đây, chúng tôi cho rằng bạn đã thực hiện thành công chroot /tmp/data/@ubuntu1510
(hoặc bất kỳ phân vùng hệ thống được gắn kết nào của bạn được gọi)
Bước 2: Loại bỏ thông báo lỗi trên
Tôi đang sử dụng btrfs (như bạn có thể đoán từ tên subvolume đã đề cập), vì vậy lvmetad có thể dễ dàng bị vô hiệu hóa như sau mà không mất chức năng:
- chỉnh sửa /etc/lvm/lvm.conf và thay đổi
use_lvmetad=1
thànhuse_lvmetad=0
- thi hành
update-initramfs -k $(uname -r) -u ; sync
Bây giờ, bạn có thể khởi động lại và thông báo lỗi sẽ biến mất. Tuy nhiên, trong trường hợp của tôi, thông báo lỗi tiếp theo [1] đã chỉ cho tôi vấn đề tiềm ẩn được đề cập ở trên, vì vậy trong khi chúng ta đang ở đó, ...
Bước 3: Đảm bảo rằng / etc / crypttab trỏ đến các phân vùng chính xác, không bị hư hại
Trước tiên, hãy chạy sfdisk --list /dev/sdX
và kiểm tra xem phân vùng trao đổi được mã hóa của bạn (trong trường hợp của tôi, / dev / sdX2) thực sự không hiển thị dưới dạng phân vùng trao đổi (bình thường). Nếu đúng như vậy (như trong trường hợp của tôi), điều này có nghĩa là việc khởi động, ví dụ, sử dụng đĩa cứu hộ có thể sẽ sử dụng phân vùng trao đổi có sẵn đó, do đó ghi đè lên siêu dữ liệu liên quan đến cryptsetup của bạn (cụm từ khóa và UUID).
Tiếp theo, hãy xem / dev / đĩa / by-uuid và so sánh các UUID tương ứng của các phân vùng được mã hóa của bạn với các phân vùng có trong / etc / crypttab. Tôi đoán tại thời điểm này: Trong trường hợp của bạn, có một sự không phù hợp.
Nếu không tìm thấy phân vùng trao đổi được mã hóa chuyên dụng bên dưới / dev / đĩa / by-uuid, thì đó là bởi vì hệ thống cứu hộ của bạn hiện đang được sử dụng. Trong trường hợp đó, hãy làm như sau:
- đảm bảo ngừng sử dụng phân vùng:
swapoff -a
- định dạng lại nó:
mkfs.ext2 /dev/sdX2
(điều này rất quan trọng , đặc biệt là khi sử dụng phân vùng GPT [2], vì nó hoàn tác trục trặc tôi đã đề cập trước đó. Nguyên nhân có thể của phân vùng hiển thị là loại "hoán đổi" trong danh sách sfdisk là do bạn / tôi đã sử dụng nhầm mkswap /dev/sdX2
khi thiết lập phân vùng lúc đầu.)
- làm theo hướng dẫn để mã hóa phân vùng và đặt cụm mật khẩu; sau đó, mở nó bằng cryptsetup và định dạng lại đúng phân vùng đã được giải mã (sử dụng cái gì đó như
mkswap /dev/mapper/swap
)
- đảm bảo rằng
sfdisk --list /dev/sdX
sẽ không xác định phân vùng trao đổi như vậy (trong trường hợp đó, lặp lại các bước cuối cùng)
Bây giờ, hãy kiểm tra lại rằng các UUID được liệt kê trong / etc / crypttab là phù hợp với những gì bạn thấy bên dưới / dev / đĩa / by-uuid cho các phân vùng được mã hóa tương ứng của bạn.
Một lần nữa, để thực hiện các thay đổi vĩnh viễn, bạn phải thực hiện update-initramfs
như được hiển thị ở trên.
Nếu bạn hài lòng, hãy đảm bảo mọi thứ được ghi vào đĩa và khởi động lại hệ thống (không cần ngắt kết nối mọi thứ theo cách thủ công). Sau đó, vấn đề của bạn sẽ biến mất.
[1] có thể tôi đã không chú ý lần đầu tiên hoặc thông báo lỗi đầu tiên "che dấu" lần thứ hai; tức là, chỉ sau khi khởi động lại (với use_lvmetad=0
), tôi mới được trình bày " Đọc tất cả các khối vật lý. Việc này có thể mất một lúc ... " (lặp đi lặp lại nhiều lần), tiếp theo là " ALERT! / dev / đĩa / by-uuid / .. không tồn tại. ". (Cần lưu ý rằng update-initramfs
cũng phàn nàn về một phân vùng bị thiếu.)
[2] vì loại của chúng bị trừ khi phân tích nội dung của chúng và cuối cùng không được chỉ định bởi cờ / byte (đó là lý do tại sao không có cách dễ dàng nào, ví dụ: thay đổi loại hệ thống tệp GPT bằng cách sử dụng [g]parted
.)