Làm thế nào tôi có thể khoanh vùng / hoán đổi mà không xóa sạch những gì làm cho nó trở thành một hoán đổi?


8

Tôi có một tập lệnh mà tôi chạy để tối ưu hóa không gian đĩa trước khi sao lưu một khách ảo (thực sự không quá quan trọng việc sử dụng trình ảo hóa nào).

Các phiên bản Ubuntu hiện đại (ví dụ 18.04) dường như được mặc định sử dụng /swapfilethay vì phân vùng cho mục đích này. Điều đó cũng tốt

Tuy nhiên, tôi muốn cung cấp tệp hoán đổi cùng với phân vùng gốc có chứa nó.

Với các phân vùng trao đổi, điều này tương đối không gây đau đớn vì luôn có một cách để trích xuất hiện có $UUIDtừ phân vùng trao đổi và - sau khi hoàn thành phân vùng - chạy mkswap -U $UUIDđể tạo lại phân vùng trao đổi đã nói.

Tuy nhiên, với /swapfiletôi không thấy làm thế nào để làm điều đó. Mặc dù tôi nhận ra rằng bạn không thể gắn kết /swapfileUUID /etc/fstab, tôi vẫn muốn giữ lại UUID.

Vì vậy, tôi nghĩ cần một trong những điều sau đây để tiến hành:

  1. Tôi cần một phương thức có thể khoanh vùng tệp hoán đổi mà không xóa sạch các cấu trúc làm cho nó thành một phân vùng trao đổi (tức là tránh phải chạy mkswap -U $UUID)
  2. Tôi cần một phương thức để truy xuất UUID hiện có từ một tệp hoán đổi (trái ngược với phân vùng nơi tôi có thể sử dụng bất cứ thứ gì blkidđể nhìn vào /dev/disk/by-uuid/$UUID...)

Câu trả lời:


15
  1. Điều này sẽ không xóa tệp hoán đổi triệt để như tạo lại nó, nhưng nếu bạn xóa nó sau khi bỏ qua 4KiB đầu tiên (nói đúng ra, trang đầu tiên, phụ thuộc vào kiến ​​trúc của bạn), bạn sẽ không chạm vào bất kỳ cấu trúc nào trong đó xác định một tập tin trao đổi.

  2. blkid hoạt động tốt trên các tập tin trao đổi quá:

    $ mkswap swap
    Setting up swapspace version 1, size = 512 MiB (536866816 bytes)
    no label, UUID=7916b81f-1faa-4b7d-84ef-b0bf2f75dbbc
    
    $ blkid swap
    swap: UUID="7916b81f-1faa-4b7d-84ef-b0bf2f75dbbc" TYPE="swap"
    

Định dạng tiêu đề được xác định trong kernel : định dạng cũ có giá trị ma thuật ở cuối trang đầu tiên, định dạng mới kết hợp với vùng trống 1KiB, sau đó một số trường (phiên bản, kích thước, trang xấu, UUID, nhãn) mà tất cả phù hợp thoải mái trong trang đầu tiên.


Ồ, hãy đưa ra câu trả lời nhanh nhất tôi từng nhận được trên bất kỳ trang web StackExchange nào. Cảm ơn. Tôi thẳng thắn không bao giờ sử dụng blkidvới một tham số. Đoán tôi nên làm điều đó hơn là, ví dụ, sử dụng ddvới một bù.
0xC0000022L

3
Phải, đọc UUID và tạo lại tệp hoán đổi có lẽ là tùy chọn dễ dàng hơn.
Stephen Kitt

@ 0xC0000022L cũng xem xét các tùy chọn định dạng đầu ra của blkid. Tùy thuộc vào phiên bản, bạn có thể thực hiện blkid swap -o value -s uuidđể chỉ trích xuất UUID.
muru

@muru cảm ơn, đã làm và chọn tham gia blkid -o export <file>mà tôi chuyển qua sedđể trả trước local cho mỗi dòng và sau đó evalsử dụng Bash. Bằng cách này, tôi có các giá trị trong hàm của mình dưới dạng các biến môi trường cục bộ ngay lập tức.
0xC0000022L
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.