จาก Ubuntu 16.04 ที่ใช้งานได้ฉันประสบความสำเร็จในการเข้ารหัสรูตพาร์ติชันหลังการติดตั้งโดยที่พาร์ทิชันรูทมีทุกอย่างยกเว้น / boot ฉันใส่ / boot บน usb แบบถอดแยกได้ โดยเฉพาะอย่างยิ่งฉันทำสิ่งนี้ก่อนที่จะอัปเกรดเป็น Ubuntu 18 และการอัปเกรดทำงานได้ดีกับรุ่นของดิสก์ที่เข้ารหัส
การเข้ารหัสไม่ได้ทำ "อยู่ในที่" ซึ่งใช้ได้กับฉันเพราะฉันไม่ต้องการเขียนทับเวอร์ชันการทำงานจนกว่าการตั้งค่าใหม่จะทำงานอยู่ดี
การปฏิบัติตามขั้นตอนที่ถูกต้องนั้นง่ายและรวดเร็วมาก (แม้ว่าการหาขั้นตอนที่ถูกต้องนั้นใช้เวลานานมากเพราะฉันทำตามโอกาสในการขายที่ผิดพลาด)
OUTLINE
- สร้างดิสก์ USB linux แบบสด - สะดวกในการเปิดใช้งานการคงอยู่ บูตที่ดิสก์ USB สด
- สร้างกลุ่มวอลุ่มที่เข้ารหัส luk บนพาร์ติชันที่ว่างเปล่า (ในกรณีของฉันมันอยู่ในดิสก์เดียวกับ linux ดั้งเดิม แต่อาจเป็นดิสก์อื่น) สร้าง / (ราก) และสลับโลจิคัลวอลุ่มบนพาร์ติชันที่เข้ารหัสนั้น สิ่งเหล่านี้จะทำหน้าที่เสมือนพาร์ติชั่นที่เกี่ยวข้องกับการคัดลอกลินุกซ์
- คัดลอกไฟล์จากรูทเก่าไปยังรูทใหม่
- ตั้งค่าและแบ่งพาร์ติชัน USB อื่นเพื่อทำหน้าที่เป็นดิสก์สำหรับบูตแบบถอดได้
- ตั้งค่าไฟล์บางไฟล์ในรูทใหม่ทำเวทมนตร์และ chroot ลงในรูทใหม่แล้วติดตั้งด้วงลงในดิสก์สำหรับบูตจากสภาพแวดล้อมรูทใหม่ของ chroot
รายละเอียด
1 - บูตด้วยดิสก์ USB linux แบบสด - สะดวกในการเปิดใช้งานการคงอยู่
ติดตั้ง Ubuntu 16 บน usb ด้วย unetbootin GUI อนุญาตให้ระบุ "การคงอยู่" แต่ต้องดำเนินการอีกขั้นตอนหนึ่งเพื่อรับการคงอยู่ให้ทำงาน - แก้ไข/boot/grub/grub.cfg
เพื่อเพิ่ม--- persistent
ดังนี้:
menuentry "Try Ubuntu without installing" {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash --- persistent
initrd /casper/initrd
}
บูตด้วย USB สด
2- สร้างกลุ่มวอลุ่มที่เข้ารหัส luks บนพาร์ติชันที่ว่างเปล่า สร้าง / (root) และสลับโลจิคัลวอลุ่มบนพาร์ติชันที่เข้ารหัสนั้น
/dev/nvme0n1p4
สมมติพาร์ทิชันที่ไม่ได้ใช้จะได้รับการเข้ารหัส
เป็นทางเลือกถ้าคุณมีข้อมูลเก่าบนพาร์ติชันที่คุณต้องการซ่อนก่อนการเข้ารหัสและการจัดรูปแบบคุณอาจสุ่มเช็ดพาร์ติชัน ดูการอภิปรายที่นี่
dd if=/dev/urandom of=/dev/nvme0n1p4 bs=4096 status=progress
ตั้งค่าการเข้ารหัส
cryptsetup -y -v luksFormat /dev/nvme0n1p4
คุณจะถูกขอให้ตั้งรหัสผ่าน
cryptsetup luksOpen /dev/nvme0n1p4 crypt1
คุณจะถูกขอให้ป้อนรหัสผ่าน โปรดทราบว่าcrypt1
เป็นชื่อที่ผู้ใช้กำหนดเอง ตอนนี้สร้างไดรฟ์และรูปแบบ
pvcreate /dev/mapper/crypt1
vgcreate crypt1-vg /dev/mapper/crypt1
lvcreate -L 8G crypt1-vg -n swap
mkswap /dev/crypt1-vg/swap
lvcreate -l 100%FREE crypt1-vg -n root
mkfs.ext4 /dev/crypt1-vg/root
ใช้โปรแกรมอรรถประโยชน์เหล่านี้เพื่อดูปริมาณและทำความเข้าใจกับลำดับชั้น
pvscan
vgscan
lvscan
ls -l /dev/mapper
ls -l /dev/crypt1
3- คัดลอกไฟล์จากรูทเก่าไปยังรูทใหม่
mkdir /tmp/old-root
mount /dev/ubuntu-vg/root /tmp/old-root/
mkdir /tmp/new-root
mount /dev/crypt1-vg/root /tmp/new-root/
cp -a /tmp/old-root/. /tmp/new-root/
umount /tmp/old-root
umount /tmp/new-root
cp -a ...
คัดลอกในโหมดเก็บถาวรเก็บรักษาโหมดไฟล์และแฟล็กทั้งหมด
4- ตั้งค่าและแบ่งพาร์ติชัน USB อื่นเพื่อทำหน้าที่เป็นดิสก์สำหรับบูตแบบถอดได้
ฉันใช้ gparted สำหรับสิ่งนี้ ตั้งค่าสองพาร์ติชัน พาร์ทิชันแรกเป็นที่สองvfat
ext2
แต่ละอันมีขนาด 512 MB คุณอาจหนีน้อยลง /dev/sdf
สมมติอุปกรณ์
# The first partition: (will be /dev/sdf1)
Free space preceding (leave default value)
New size 512 MiB
Free space following (leave default value)
Create as: Primary Partition
Partition Name: (leave)
File System: fat32
Label: (leave)
# The second partition: (will be /dev/sdf2)
Free space preceding (leave default value)
New size 512 MiB
Free space following (leave default value)
Create as: Primary Partition
Partition Name: (leave)
File System: ext4
Label: (leave)
5- ตั้งค่าไฟล์บางไฟล์ในรูทใหม่, ทำเวทมนต์, และ chroot เป็นรูทใหม่แล้วติดตั้งด้วงลงบนดิสก์สำหรับบูตจากสภาพแวดล้อมรูทใหม่ของ chroot
ค้นหา UUID บางตัวเพื่อใช้ในภายหลัง บันทึกผลลัพธ์จากคำสั่งต่อไปนี้:
blkid /dev/sdf1
blkid /dev/sdf2
blkid /dev/nvme0n1p4
เมาท์พาร์ติชันรากและพาร์ติชันสำหรับเริ่มระบบ
sudo mount /dev/mapper/crypt1--vg-root /mnt
sudo mount /dev/sdf2 /mnt/boot
sudo mount /dev/sdf1 /mnt/boot/efi
ตั้งค่าไฟล์ /mnt/etc/fstab
/dev/mapper/crypt1--vg-root / ext4 errors=remount-ro 0 1
/dev/mapper/crypt1--vg-swap none swap sw 0 0
UUID=[uuid of /dev/sdf2] /boot ext2 defaults 0 2
UUID=[uuid of /dev/sdf1] /boot/efi vfat umask=0077 0 1
โดยที่ "[uuid of ... ]" เป็นเพียงการรวมกันระหว่างตัวอักษรและตัวเลข
สร้างไฟล์ /mnt/etc/cryptab
# <target name> <source device> <key file> <options>
crypt1 UUID=[uuid of /dev/nvme0n1p4] none luks,discard,lvm=crypt1--vg-root
เวทมนต์บางอย่างที่จำเป็นในการเข้าสู่สภาพแวดล้อมของไดเรกทอรีราก:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
chroot /mnt
ตอนนี้ตั้งค่าดิสก์ USB สำหรับบูตด้วยgrub
:
apt install --reinstall grub-efi-amd64
grub-install --efi-directory=/boot/efi --boot-directory=/boot --removable
update-initramfs -k all -c
update-grub
ตอนนี้คุณควรจะสามารถรีบูตและบูตโดยใช้ดิสก์สำหรับบูต USB ที่สร้างขึ้นใหม่
Toubleshooting-
(a)เครือข่ายจะต้องเชื่อมต่อสำหรับapt install --reinstall grub-efi-amd64
คำสั่ง หากเครือข่ายเชื่อมต่อ แต่ DNS ล้มเหลวให้ลอง
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
(b)ก่อนการเรียกไฟล์initramfs
ปัจจุบันที่vmlinuz...
ใช้ใน linux ดั้งเดิมจะต้องปรากฏในไดเรกทอรีรากใหม่ หากไม่ใช่ให้ค้นหาและวางไว้ที่นั่น
(ค)grub-install
คำสั่งจะโดยการค้นหาเริ่มต้นของทุกดิสก์ลินุกซ์อื่น ๆ ก็สามารถหาแม้ว่าพวกเขาจะไม่ได้mount
เอ็ดและใส่ไว้ในเมนูการบูตบน USB บูตใหม่ มักจะไม่ต้องการสิ่งนี้ดังนั้นจึงสามารถหลีกเลี่ยงได้โดยการเพิ่มบรรทัดนี้ใน/boot/default/grub.cfg
:
GRUB_DISABLE_OS_PROBER=true
หมายเหตุ:
ไฟล์ข้อความที่มีคีย์การเข้ารหัสสามารถเพิ่มเข้ากับบูต USB แบบถอดได้