Sửa lỗi cài đặt không thể khởi động trên root LVM từ Desktop LiveCD


9

Tôi vừa thực hiện cài đặt từ 10.10 Desktop LiveCD, biến âm lượng gốc thành LVM LV.

Rõ ràng điều này không được hỗ trợ; Tôi đã quản lý nó bằng cách thực hiện các bước này trước khi bắt đầu ứng dụng trình cài đặt GUI:

  • cài đặt lvm2gói trên hệ thống đang chạy
  • tạo phân vùng kiểu LVM trên ổ cứng hệ thống
  • tạo một khối lượng vật lý, một nhóm âm lượng và LV gốc bằng các công cụ LVM. Tôi cũng đã tạo một LV thứ hai cho /var; Điều này tôi không nghĩ là có liên quan.
  • tạo một hệ thống tập tin (ext4) trên mỗi hai LV.

Sau khi thực hiện các bước này, trình cài đặt GUI cung cấp hai LV làm mục tiêu cài đặt; Tôi sẵn sàng chấp nhận, cũng đặt /bootmột phân vùng chính tách biệt với phân vùng LVM.

Quá trình cài đặt có vẻ suôn sẻ và tôi đã xác minh rằng cả khối gốc và var đều chứa cấu trúc thư mục trông có thể chấp nhận được.

Tuy nhiên, khởi động thất bại; nếu tôi hiểu chính xác những gì đã xảy ra, tôi đã bị rơi vào một hộp bận chạy trong hệ thống tập tin initrd.

Mặc dù tôi chưa làm việc với toàn bộ tài liệu grub2, nhưng có vẻ như mục nhập cố gắng khởi động hệ thống mới của tôi là chính xác:

menuentry 'Ubuntu, with Linux 2.6.35-22-generic' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos3)'
    search --no-floppy --fs-uuid --set $UUID_OF_BOOT_FILESYSTEM
    linux   /vmlinuz-2.6.35-22-generic root=/dev/mapper/$LVM_VOLUME_GROUP-root ro   quiet splash
    initrd  /initrd.img-2.6.35-22-generic
}

Lưu ý rằng $ VARS được thay thế trong thực tế grub.cfgbằng các giá trị tương ứng của chúng.

Tôi khởi động lại vào livecd và đã giải nén hình ảnh initrd vào một thư mục tạm thời. Có vẻ như hình ảnh initrd thiếu chức năng LVM. Ví dụ: nếu tôi đang đọc /usr/share/initramfs-tools/hooks/lvm2(được cài đặt lvm2trên hệ thống khởi động livecd, không có mặt trên hệ thống đã cài đặt) một cách chính xác, lvmthì nên đặt một tệp thực thi /sbin; Đó không phải là tình huống.

Cách tốt nhất để khắc phục tình trạng này là gì? Tôi nhận ra rằng việc sử dụng đĩa CD cài đặt thay thế sẽ dễ dàng hơn, có vẻ như hỗ trợ LVM, nhưng tôi không muốn đợi nó tải xuống và sau đó phải cài đặt lại.

Câu trả lời:


9

Bạn đánh vào vấn đề ngay trên đầu: initramfs không có hỗ trợ LVM. Đây là cách khắc phục:

  1. Khởi động lại LiveCD
  2. Cài đặt lvm2lại trong môi trường Live
  3. Đưa nhóm âm lượng (nếu -ay không hoạt động thử -a có)

    vgchange -a y
    
  4. Nhận LV gốc, / boot và / dev được gắn dưới cây riêng biệt

    mkdir /newroot
    mount /dev/yourVG/rootLV /newroot
    mount /dev/yourbootpartition /newroot/boot
    mount -o bind /dev /newroot/dev
    
  5. Sao chép các gói cần thiết vào cây / newroot

    cp /var/cache/apt/archives/*deb /newroot/tmp/
    
  6. Chroot vào cây mới và cài đặt các gói

    chroot /newroot
    cd /tmp
    dpkg -i *.deb
    

Tại thời điểm này, mọi thứ sẽ trở lại bình thường (vì initramfs sẽ được tạo lại khi cài đặt lvm2). Nếu không, bạn có thể chơi với chạy update-initramfs -ubên trong chroot.


Lý do cho sự gắn kết / dev là gì?
trực giác

Tôi đã thêm / dev trong trường hợp grub được chạy lại và muốn tìm ra vị trí của các ổ đĩa khởi động. Tôi đã sử dụng dpkg trong trường hợp mạng không hoạt động hoặc kỳ lạ bên trong chroot. Nếu kết nối mạng không hoạt động, tôi khuyên bạn nên "apt-get" hơn "aptitude" vì nó giải quyết tốt hơn những ngày này.
Kees Cook

Cảm ơn về mẹo này apt-get, thật khó để theo dõi những gì. Bạn có một liên kết để biết thêm thông tin về điều đó?
trực giác

1

Sau khi cài đặt hệ thống vào đĩa cứng, bạn cần cài đặt lvm2 vào hệ thống đó trước khi có thể khởi động. Nếu bạn đã cài đặt lvm2 trên livecd, thì các gói sẽ vẫn ở trong / var / cache / apt / archives. Thay đổi thư mục đó, gắn đĩa cứng và cài đặt các gói vào đĩa cứng bằng cách sử dụng dpkg --root = / mnt * .deb. Trong trường hợp của bạn, bạn cần gắn root fs vào / mnt, và cả var fs vào / mnt / var.

Ngoài ra, bạn không cần phân vùng riêng / khởi động và phân vùng / var riêng biệt là nghi vấn.


Đẹp .. điều đó dễ hơn chroot-ing. Tôi đoán điều này sẽ không đăng ký aptitudedb của các gói được cài đặt rõ ràng, vì vậy tôi có lẽ chỉ nên cài đặt lvm2và phụ thuộc của nó theo cách này. Bất kỳ nhược điểm để sử dụng một riêng biệt /var? Khác với vấn đề phải phân bổ thêm không gian 'chùng'? Tôi muốn có thể chụp nhanh nó, vì vậy tôi không muốn trộn nó với các tệp biến lớn khác; Tôi đang lên kế hoạch liên kết hoặc gắn kết thư mục chính của mình vào một thư mục trong một /dataổ đĩa riêng mà tôi sẽ tạo sau khi hệ thống hoạt động và chạy, để giữ nhạc và những thứ tương tự.
trực giác

Ngoài ra: Tôi cũng sẽ cần phải gắn boot fs tại /mnt/boot, phải không? Tôi tập hợp mà lvm2xây dựng một initrd mới về cài đặt.
trực giác

@intuited không, nó sẽ được ghi là cài đặt thủ công như mọi khi. Có, bạn cũng cần / boot gắn nếu bạn có một cái riêng biệt. Có một / var riêng không giúp tạo ảnh chụp nhanh.
psusi

Một /varphân vùng riêng sẽ không giúp ích với các ảnh chụp nhanh, không, nhưng, chẳng hạn, nó sẽ giúp ngăn chặn các fs gốc lấp đầy bất ngờ. Bạn đang nói rằng nó sẽ giới thiệu các vấn đề với chụp ảnh nhanh? Oh, đợi đã, đó là bạn trên chủ đề bình luận câu hỏi khác. Nevermind ..
trực giác

1

Cuối cùng tôi đã làm hầu hết những gì Kees Cook đưa ra, với một số trợ giúp từ phần cuối cùng của hướng dẫn này . Tuy nhiên:

  • Tôi đã không gắn kết /dev. Có vẻ như điều này gây ra một số thông báo lỗi sau này; xem bên dưới.
  • Tôi gắn /varâm lượng của tôi trên root mới ngoài /boot.
  • Tôi đã không sao chép các cuộc tranh luận vào thư /tmpmục gốc. Thay vào đó, tôi chạy # apt-get install aptitude; aptitude install lvm2theo chrooting.

    • Tôi đã làm điều này để đăng ký các hành động này trong cơ sở dữ liệu apt: ví dụ aptitude, và có lẽ apt-get, cũng sẽ theo dõi các gói nào được cài đặt rõ ràng và được cài đặt tự động dưới dạng phụ thuộc.
    • Vì tôi thực sự nhận được các gói của mình thông qua proxy apt cục bộ (đang chạy apt-cacher-ng), tôi thậm chí không phải đợi chúng tải xuống nữa. Tôi đã phải tạo một tập tin /etc/apt/apt.conf.d/02proxycó chứa Acquire::http::Proxy "http://local-apt-proxy-server:3142";trước khi chạy apt-get. Tôi đã làm điều tương tự trước khi bắt đầu cài đặt các gói trong khi chạy LiveCD trước khi thực hiện cài đặt.
    • Tôi đã nhận được một thông báo lỗi hoặc cảnh báo một vài lần, nói rõ

      Can not write log, openpty() failed (/dev/pts not mounted?)
      

** gắn kết -o liên kết / dev / pts / mnt / YouNameIt / dev / pts

    This did not prevent the appropriate lines from being added to `/var/log/dpkg.log`.

    I suspect that this issue could have been averted by bind-mounting `/dev`, but I don't really understand what it means, i.e. I don't know what log it's referring to, or why it would need to access a pty in order to write to a log.

Tôi chấp nhận câu trả lời của riêng tôi vì nó hoạt động tốt với tôi; xem câu trả lời của Kees cho một giải pháp tương tự có thể đáng tin cậy hơn trong một số tình huống.
trực giác
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.