Ngủ đông và tiếp tục từ một tập tin trao đổi


23

Tôi đã cấu hình cài đặt Ubuntu mới trong Notebook để sử dụng tệp hoán đổi, thay vì sử dụng phân vùng trao đổi.

Theo mặc định, không thể có được Ubuntu để ngủ đông bằng cách sử dụng tệp hoán đổi, vì vậy tôi đã thử hướng dẫn này , nhưng nó đặc trưng cho grub1 và Ubuntu hiện sử dụng grub2 .

Có ai biết làm thế nào để làm điều này?

Câu trả lời:


21

Ngủ đông với tập tin Hoán đổi bằng uswusp

Mặc dù có thể ngủ đông để hoán đổi tập tin và nó được cho là hoạt động với hệ thống ngủ đông bằng cách thiết lập các tham số kernel. Tuy nhiên, tôi không thể khiến nó tiếp tục lại nên thay vào đó chuyển sang sử dụng uswsusp (tạm dừng phần mềm không gian người dùng) . Dưới đây là các bước tôi đã sử dụng trên Ubuntu 17.04 / 17.10.

Tạo tập tin hoán đổi

Các lệnh để tạo tệp hoán đổi 4GiB được định dạng, được gắn và thêm vào /etc/fstab:

sudo fallocate -l 4g /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab

Xác minh phân vùng tệp hoán đổi

sudo findmnt -no SOURCE,UUID -T /swapfile
> /dev/sda1 11cc33ee-1234-abcd-1234-ddeeff112233

Cài đặt Tạm dừng phần mềm không gian người dùng (uswsusp)

sudo apt install uswsusp

Cấu hình uswsusp

Để tạo /etc/uswsusp.confvà tạo lại initramfs:

sudo dpkg-reconfigure -pmedium uswsusp
  • Yesđể ' Tiếp tục mà không có không gian hoán đổi hợp lệ? ' (Thuật sĩ chưa đặt tệp hoán đổi.)
  • Chọn phân vùng mà tệp hoán đổi nằm trên, tham chiếu chéo với các chi tiết findmntở trên. ( Lưu ý: không phải chính tệp hoán đổi )

Lưu ý: Mọi thay đổi được thực hiện thủ công /etc/uswsusp.confsẽ yêu cầu tạo lại initramfssau đó bằng lệnh này:

sudo update-initramfs -u

Kiểm tra uswusp ngủ đông

sudo s2disk

Nên có snapshottin nhắn trên màn hình trên chế độ ngủ đông và tiếp tục.

Sử dụng s2disk với hệ thống ngủ đông systemd

Theo mặc định systemd sẽ sử dụng các lệnh ngủ đông của riêng nó, vì vậy thay thế chúng bằng các lệnh uswusp bằng cách ghi đè systemd-hibernate.service:

sudo systemctl edit systemd-hibernate.service

Trong trình soạn thảo văn bản mở ra, đặt văn bản sau (yêu cầu ExecStart trống). Sau đó lưu và thoát:

[Service]
ExecStart=
ExecStart=/usr/sbin/s2disk 
ExecStartPost=/bin/run-parts -a post /lib/systemd/system-sleep

Điều này sẽ tạo /etc/systemd/system/systemd-hibernate.service.d/override.conftập tin với các chi tiết ghi đè.

Kiểm tra hệ thống ngủ đông:

systemctl hibernate 

Lưu ý: Để kiểm tra xem systemd override.confđã được tạo, tải và không có lỗi, hãy chạy:

systemctl status systemd-hibernate.service

Tài liệu tham khảo:


Hướng dẫn này có vẻ hiệu quả nhưng chế độ ngủ đông systemd không hoạt động đối với tôi. Bạn đã thử nghiệm điều này của riêng bạn? Điều này nên ExceStart=run-parts -a post /lib/systemd/system-sleepExceStartPost=run-parts -a post /lib/systemd/system-sleep
Joaquín Aramendía

Nó đã được thử nghiệm và hoạt động nhưng có lẽ sự bổ sung đó là cần thiết. Tôi đã cập nhật câu trả lời của tôi.
Cas

Điều này có vẻ không đúng lắm. Các enabletùy chọn của systemctl symlink từ /etc/systemd/system/đến /lib/systemd/system/. Bạn không bao giờ nên sao chép trực tiếp vào/etc/systemd/system/
Auspex

1
Tôi đã không quản lý để làm cho công việc này. Tôi đã thiết lập hoán đổi, cài đặt và định cấu hình uswsusp, nhưng sudo s2diskchỉ ghi nhật ký Saving snapshot, hơn là tắt màn hình, treo trong ~ 5 phút và sau đó nó tắt máy tính. Tuy nhiên sau khi tôi bật nó lên, nó khởi động bình thường như không có chế độ ngủ đông.
m93a

1
Tôi nghĩ dòng này sudo findmnt -no SOURCE,UUID -T /mnt/4GiB.swapnên được đổi thànhsudo findmnt -no SOURCE,UUID -T /swapfile
user1915011

12

Đây là những gì tôi đã làm để làm cho nó hoạt động với Ubuntu 18.04.

  • Làm cho bạn /swapfilecó ít nhất kích thước của RAM của bạn

    sudo swapoff /swapfile
    sudo dd if=/dev/zero of=/swapfile bs=$(cat /proc/meminfo | grep MemTotal | grep -oh '[0-9]*') count=1024 conv=notrun
    sudo mkswap /swapfile
    sudo swapon /swapfile
    
  • Lưu ý UUID của phân vùng chứa /swapfile:

    $ sudo findmnt -no SOURCE,UUID -T /swapfile
    /dev/nvme0n1p5 20562a02-cfa6-42e0-bb9f-5e936ea763d0
    
  • Định cấu hình lại gói uswsuspđể sử dụng chính xác tệp hoán đổi:

    sudo dpkg-reconfigure -pmedium uswsusp
    # Answer "Yes" to continue without swap space
    # Select "/dev/disk/by-uuid/20562a02-cfa6-42e0-bb9f-5e936ea763d0" replace the UUID with the result from the previous findmnt command
    # Encrypt: "No"
    
  • Chỉnh sửa dịch vụ ngủ đông SystemD bằng cách sử dụng sudo systemctl edit systemd-hibernate.servicevà điền vào nội dung sau:

    [Service]
    ExecStart=
    ExecStartPre=-/bin/run-parts -v -a pre /lib/systemd/system-sleep
    ExecStart=/usr/sbin/s2disk
    ExecStartPost=-/bin/run-parts -v --reverse -a post /lib/systemd/system-sleep
    
  • Lưu ý bù đắp sơ yếu lý lịch của bạn /swapfile:

    $ sudo swap-offset /swapfile
    resume offset = 34818
    
  • Định cấu hình Grub để tiếp tục từ tệp hoán đổi bằng cách chỉnh sửa /etc/default/grubvà sửa đổi dòng sau:

    GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=20562a02-cfa6-42e0-bb9f-5e936ea763d0 resume_offset=34818 quiet splash"
    
  • Cập nhật Grub:

    sudo update-grub
    
  • Tạo như sau /etc/initramfs-tools/conf.d/resume:

    RESUME=UUID=20562a02-cfa6-42e0-bb9e-5e936ea763d0 resume_offset=34816
    # Resume from /swapfile
    
  • Cập nhật initramfs:

    sudo update-initramfs -u -k all
    

Bây giờ bạn có thể ngủ đông với sudo systemctl hibernate.

Người ta cũng có thể tạo các tập lệnh đó:

    sudo tee /usr/local/bin/gotosleep <<EOF
    dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
    sleep 2
    sudo /usr/sbin/s2both
    EOF
    sudo chmod +x /usr/local/bin/gotosleep
    sudo tee /usr/local/bin/gotohibernation <<EOF
    dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
    sleep 2
    sudo systemctl hibernate
    EOF
    sudo chmod +x /usr/local/bin/gotohibernation

Vì vậy, bạn có thể ngủ với gotosleephoặc ngủ đông với gotohibernation.

Bạn phải có khả năng thực hiện sudo s2both, sudo s2ramsudo systemctl hibernatekhông cần phải nhập mật khẩu của bạn cho các kịch bản trước để làm việc.

Bạn có thể làm điều đó chẳng hạn bằng cách tạo một powerdevnhóm, thêm người dùng hiện tại của bạn vào đó và định cấu hình cấu hình sudoers sau (chỉnh sửa nó bằng sudo visudo -f /etc/sudoers.d/powerdev):

     %powerdev ALL=NOPASSWD: /usr/sbin/s2both, /usr/sbin/s2ram, /bin/systemctl hibernate

Tài liệu được sử dụng:


Cảm ơn vì điều này! Tôi đã thử nhiều phương pháp, nhưng chỉ có phương pháp của bạn hoạt động với tôi trên Ubuntu 18.04 :)
jirislav

Điều này gần như khiến tôi cảm thấy muốn thử ngủ đông một lần nữa - tôi gặp vấn đề với tham nhũng không thường xuyên trên các đĩa của mình, điều này rõ ràng có liên quan đến quá trình ngủ đông. Bạn đã gặp phải bất cứ điều gì như vậy?
Charles Green

Cảm ơn bạn, @Anthony! Tôi đã thử rất nhiều thứ để ngủ đông hoạt động. Của bạn là giải pháp cuối cùng đã làm. Nó có vẻ rất lạ đối với tôi rằng điều này không được thiết lập chính xác ngay lập tức. :(
Mike Williamson

Cảm ơn đã hướng dẫn này. Sau khi làm theo các bước sau đó cố gắng ngủ đông bằng cách sử dụng $ sudo systemctl hibernate, máy tính xách tay của tôi thức dậy một vài giây sau khi cố gắng ngủ đông. / var / log / syslog hiển thị nhiều lỗi, nhưng những lỗi này có vẻ phù hợp nhất: - Không thể đặt chế độ tiết kiệm năng lượng cho đầu ra eDP-1: Quyền bị từ chối ... - Đối tượng. Không thể đặt bất kỳ tài sản cho nó. ... - s2disk: Không thể sử dụng thiết bị tiếp tục (thử hoán đổi -a). Lý do: Không có thiết bị nào như vậy - systemd-hibernate.service: Quá trình chính đã thoát, code = exited, ...
Jelani Nelson

1
Đây là giải pháp duy nhất làm việc cho tôi. Đăng nhập chỉ để nâng cao câu trả lời này. Cảm ơn.
dpetrini

8

Tôi đã đọc nhanh hướng dẫn và, nếu tôi hiểu đúng, bạn chỉ cần xác định các resumetùy chọn cho dòng lệnh Linux. Với Grub2 thực sự đơn giản và những thay đổi của bạn sẽ luôn được bảo tồn. Bạn cần chỉnh sửa /etc/default/grubtập tin, cụ thể là dòng này:

GRUB_CMDLINE_LINUX="resume=... resume_offset=..."

Sau đó, chạy sudo update-grubđể thay đổi có hiệu lực.

Việc thay đổi GRUB_CMDLINE_LINUXsẽ không ảnh hưởng đến các bản cài đặt Linux khác mà bạn có (vì /etc/grub.d/30_os-proberkhông sử dụng biến này).

Về vấn đề bạn gặp phải: phân vùng của hoán đổi được mã hóa? Nếu vậy, ngủ đông sẽ không hoạt động. Nếu không, thì đầu ra của filefrag -v /swapfilecó thể hữu ích.


Cảm ơn! Tôi sẽ thử. Nhưng tôi nghĩ rằng nó cấu hình tất cả các mục linux trong grub với dòng này.
tfmoraes

Đừng quên: sau khi thay đổi, /etc/default/grubbạn cần phải chạy update-grub.
JanC

@tfmoraes: tại sao bạn không muốn điều này được thêm vào tất cả các mục linux?
JanC

@JanC: Bởi vì tôi có thể có các bản phân phối Linux khác được cài đặt.
tfmoraes

1
@ didi_X8 bình luận đó đã được viết 8 năm trước. Có thể mọi thứ đã thay đổi kể từ đó. Cám ơn vì đã chia sẻ.
Andrea Corbellini
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.