Tôi đã suy nghĩ kỹ tiêu đề mô tả và hữu ích nhất cho chủ đề hôm nay, và ra được tiêu đề này. Tóm lại, chiếc laptop test Lenovo G50 của tôi, chạy thiết lập 8-boot với Windows và nhiều distro Linux, gần đây gặp NVRAM chuyển sang chỉ đọc. Tôi không thể thay đổi cài đặt UEFI nào, và do đó cũng không thể boot từ thiết bị ngoài để cài hệ thống mới.
Tuy nhiên, tôi vẫn muốn tìm cách thay đổi cài đặt hiện có, nên tôi dành thời gian suy nghĩ, có cách nào khắc phục không? Có! Những gì tôi sẽ chỉ hôm nay là một thủ thuật hơi nguy hiểm (về dữ liệu) cho phép cài hệ thống mới dù có hạn chế phần cứng rõ ràng. Theo dõi tôi.
Truy cập đĩa thô (raw disk) VirtualBox
Trước khi bắt đầu, tôi cảnh báo nghiêm trọng:
Nội dung hôm nay đòi hỏi kiến thức chuyên sâu và tự tin làm việc với ảo hóa và truy cập đĩa thô. Đây là tập hợp thao tác rất rắc rối và nguy hiểm có thể dẫn đến mất dữ liệu nghiêm trọng và đau khổ tâm lý lớn. Nếu bạn làm theo hướng dẫn của tôi vì bất kỳ lý do gì, bạn có thể kết thúc với hệ thống hoàn toàn hỏng, và mất thông tin cá nhân quý giá. Hãy tiến hành thận trọng.
Bây giờ, sau khi bạn đã sao lưu dữ liệu và tạo image hệ thống, bạn có thể bắt đầu cân nhắc test. Cách hoạt động: VirtualBox cho phép mount toàn bộ ổ đĩa hoặc phân vùng cụ thể làm ổ đĩa ảo, do đó gọi là truy cập thô (raw access). Thay vì tạo file container làm ổ đĩa ảo, bạn thực sự dùng phần cứng vật lý trực tiếp.
Vì vậy ý tưởng trở thành: Tôi có thể tạo máy ảo, dùng tính năng raw disk access, boot từ ISO, cài hệ điều hành liên quan lên phân vùng vật lý, bỏ qua thiết lập bootloader, sau đó vào instance vật lý của hệ điều hành kiểm soát trình boot (trong trường hợp này là openSUSE), và cập nhật GRUB tại đó.
Tạo raw disk
Lệnh sau sẽ làm phép màu cho bạn:
VBoxManage internalcommands createrawvmdk -filename file.vmdk -rawdisk /dev/sdX -partitions Y,Z -relative
Chúng ta có gì? Tạo một ổ đĩa, ở đâu đó, có thể trong thư mục home, hoặc thư mục chuyên dụng chứa máy ảo. Bạn chỉ định raw disk muốn dùng (trong trường hợp tôi là /dev/sda), và các phân vùng muốn dùng. Tôi chọn chỉ một (/dev/sda8, chứa CentOS 7.2), và dùng cờ relative, cho phép ghi chỉ vào phân vùng cụ thể. Điều này hạn chế thiệt hại tiềm năng.
VBoxManage internalcommands createrawvmdk -filename test.vmdk -rawdisk /dev/sda -partitions 8 -relative
VBoxManage internalcommands createrawvmdk -filename /home/roger/test.vmdk -rawdisk /dev/sda -partitions 8 -relative
RAW host disk access VMDK file /home/roger/test.vmdk created successfully.
Bạn nên chạy lệnh này với sudo hoặc root. Bạn cũng nên khởi động VirtualBox cùng cách (bất kể quyền file và sở hữu vmdk), vì giống như thao tác mount, bạn cần đặc quyền nhất định để nắm thiết bị.
Chú ý dung lượng: ổ 1TB, dù phân vùng Kubuntu chỉ 100 GB. Vì chúng ta dùng raw disk access.
Nếu thử không có sudo hoặc root, bạn sẽ gặp lỗi xấu và không hữu ích:
Result Code: VBOX_E_FILE_ERROR (0x80BB0004)
Component: MediumWrap
Interface: IMedium {4afe423b-43e0-e9d0-82e8-ceb307940dda}
Callee: IVirtualBox {0169423f-46b4-cde9-91af-1e9d5b6cd945}
Callee RC: VBOX_E_OBJECT_NOT_FOUND (0x80BB0001)
Tính năng UEFI
Còn nhiều thứ phức tạp hơn. Điều làm phức tạp hơn là tôi có hệ thống UEFI với bố cục đĩa GPT. Điều này nghĩa là bạn phải dùng controller SATA cho ổ đĩa, và cũng mount ISO theo cách đó. Hơn nữa, bạn cần chỉ định EFI trong cài đặt máy ảo. Khi tôi nói bạn, tôi là nói tôi, vì bạn KHÔNG NÊN làm điều này.
Thử nghiệm
Thật vậy, tôi boot được máy ảo theo cách này dễ dàng. Bạn thấy toàn bộ cấu trúc ổ đĩa, không cách nào tránh được. Và bây giờ, vấn đề trở thành việc cài đặt đơn giản, và tập trung cao độ, để không làm hỏng hoặc corrupt gì. Nhưng nó cung cấp cách đặt thông tin mới lên phân vùng.
Kỹ thuật, bạn cũng có thể boot máy ảo, rồi copy dữ liệu từ live media đã mount và mở rộng ra ổ cứng. Bạn có thể dùng dd, nhưng chúng ta thực sự đang đi vào lãnh vực điên rồ và cool.
Đây chính là thứ ta gọi là Inception.
Kết luận
Hãy coi raw access như vũ khí chiến lược. Bạn không bao giờ muốn dùng chúng, nhưng bạn yên tâm vì chúng tồn tại, và bạn có thể dựa vào chúng nếu cần, khi ngày mưa đến. Thay vào đó, tôi tin rằng nâng cấp in-vivo tự nhiên đã đủ thú vị, và tôi có thêm vài chiếc máy test cũ khác sẽ cung cấp giải trí cần thiết cho các cuộc phiêu lưu distro.
Nếu bạn suy nghĩ, luôn có cách. Nhưng tôi thích tìm giải pháp hòa bình, nghĩa là cố gắng làm NVRAM ghi được lại mà không tháo laptop hay rủi ro mọi thứ trên ổ. Vì vậy, nếu bạn THỰC SỰ, THỰC SỰ, THỰC SỰ bắt buộc, raw disk access qua ảo hóa cung cấp workaround. Bây giờ, chúng ta không bao giờ dùng nó. Cẩn trọng.
Chào.