머리말

머리말

머리말

실수해서 설치했어요암호화된 ZFS/OpenZFS root파티션이 있는 Ubuntu 20.04 LTS듀얼 부팅 구성의 생산적인 작업 데스크탑에서(아래 파티션 표 참조) 하지만 제가 따라하고 있던 튜토리얼에 제대로 주의를 기울이지 않았는데 이제는 RAM이 32G인데도 스왑 파티션이 4G인 것 같습니다 (편집하다: 스왑을 늘릴 수 있는 방법을 찾았지만 여전히 최대 절전 모드로 들어갈 수 없습니다. 아래를 참조하세요.). 따라서 이 컴퓨터를 최대 절전 모드로 전환할 수 없습니다.

이 문제를 해결하여 이 컴퓨터를 최대 절전 모드로 전환할 수 있는 가장 좋은 방법은 무엇입니까?

현재 상태

$ sudo fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 1.88 TiB, 2048408248320 bytes, 4000797360 sectors
Disk model: KXG60PNV2T04 NVMe KIOXIA 2048GB         
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 1FCA11ED-9263-4C06-A8DF-594C0DE84AFA

Device             Start        End    Sectors   Size Type
/dev/nvme0n1p1      2048    1085439    1083392   529M Windows recovery environment
/dev/nvme0n1p2   1085440    1290239     204800   100M EFI System
/dev/nvme0n1p3   1290240    1323007      32768    16M Microsoft reserved
/dev/nvme0n1p4   1323008  409420488  408097481 194.6G Microsoft basic data
/dev/nvme0n1p5 409421824  410920959    1499136   732M Windows recovery environment
/dev/nvme0n1p6 410923008  415117311    4194304     2G Linux filesystem
/dev/nvme0n1p7 415117312 4000797326 3585680015   1.7T Linux filesystem

$ sudo swapon --show --output all
NAME     TYPE      SIZE USED PRIO UUID                                 LABEL
/dev/zd0 partition   4G   0B   -2 1e1fb013-69d9-4878-b358-6b8ee53d5b09

$ sudo zpool list -v
NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
Root         1.66T   535G  1.13T        -         -     2%    31%  1.00x    ONLINE  -
  nvme0n1p7  1.66T   535G  1.13T        -         -     2%  31.5%      -  ONLINE

$ sudo zpool status -v
  pool: Root
 state: ONLINE
  scan: none requested
config:

    NAME         STATE     READ WRITE CKSUM
    Root         ONLINE       0     0     0
      nvme0n1p7  ONLINE       0     0     0

errors: No known data errors

$ sudo zfs list
NAME                                                                              USED  AVAIL     REFER  MOUNTPOINT
Root                                                                              539G  1.08T      192K  none
Root/root                                                                         534G  1.08T      530G  /
Root/root/00a891589b00cebc55cb6767e266ca38ac201daf3a6048c1f33d7d55c0710533        544K  1.08T      143M  legacy
[…] # many other legacy mount points
Root/root/ffe52d35c873e6a417ee12c7025d848dac1f269b8078266f00a8d8088fd34384        396K  1.08T      607M  legacy
Root/swap                                                                        4.25G  1.08T      172M  -

$ sudo zfs get all Root/swap
NAME       PROPERTY              VALUE                 SOURCE
Root/swap  type                  volume                -
Root/swap  creation              So Aug  2 15:36 2020  -
Root/swap  used                  4.25G                 -
Root/swap  available             1.08T                 -
Root/swap  referenced            172M                  -
Root/swap  compressratio         1.00x                 -
Root/swap  reservation           none                  default
Root/swap  volsize               4G                    local
Root/swap  volblocksize          4K                    -
Root/swap  checksum              on                    default
Root/swap  compression           off                   local
Root/swap  readonly              off                   default
Root/swap  createtxg             3746                  -
Root/swap  copies                1                     default
Root/swap  refreservation        4.25G                 local
Root/swap  guid                  12379969387189982956  -
Root/swap  primarycache          metadata              local
Root/swap  secondarycache        none                  local
Root/swap  usedbysnapshots       0B                    -
Root/swap  usedbydataset         172M                  -
Root/swap  usedbychildren        0B                    -
Root/swap  usedbyrefreservation  4.08G                 -
Root/swap  logbias               throughput            local
Root/swap  objsetid              278                   -
Root/swap  dedup                 off                   default
Root/swap  mlslabel              none                  default
Root/swap  sync                  always                local
Root/swap  refcompressratio      1.00x                 -
Root/swap  written               172M                  -
Root/swap  logicalused           169M                  -
Root/swap  logicalreferenced     169M                  -
Root/swap  volmode               default               default
Root/swap  snapshot_limit        none                  default
Root/swap  snapshot_count        none                  default
Root/swap  snapdev               hidden                default
Root/swap  context               none                  default
Root/swap  fscontext             none                  default
Root/swap  defcontext            none                  default
Root/swap  rootcontext           none                  default
Root/swap  redundant_metadata    all                   default
Root/swap  encryption            aes-256-gcm           -
Root/swap  keylocation           none                  default
Root/swap  keyformat             passphrase            -
Root/swap  pbkdf2iters           342K                  -
Root/swap  encryptionroot        Root                  -
Root/swap  keystatus             available             -

내가 시도한 것

스왑 파일 생성

나는 스왑 파일이 쉽게 고칠 수 있다고 생각했지만 분명히 틀렸습니다.

$ sudo dd if=/dev/zero of=/swapfile bs=1MiB count=$((32*1024))
32768+0 records in
32768+0 records out
34359738368 bytes (34 GB, 32 GiB) copied, 14.5783 s, 2.4 GB/s

$ sudo chmod 600 /swapfile

$ sudo swapon /swapfile
swapon: /swapfile: skipping - it appears to have holes.

그래서 차라리 스왑 파티션을 늘려야 할 것 같습니다. 또한 swapon스왑 파티션이 사용 가능 하다고 말하지만 4G왜 주장하는지 명확하지 않습니다 .zfs get all Root/swap1.08T

GParted의 모든 것

GParted는 많이 인식하지 못합니다. 이는 다음의 버그와 관련이 있을 수 있습니다 os-prober.GParted 문제 14,데비안 버그 888114,OS-프로버 문제 1848496, openzfs 문제9801그리고9069)

여기에 이미지 설명을 입력하세요

작은 Swap 파티션 교체(=ZFS에서 Swap 파티션 늘리기)

생성 명령은 다음에서 영감을 받았습니다.GitHub에 대한 의견하지만 명심해야 해~ 아니다사용-o sync=always.

$ sudo zfs create -V 32G -b $(getconf PAGESIZE) -o logbias=throughput -o primarycache=metadata -o secondarycache=none -o com.sun:auto-snapshot=false -o compression=zle Root/swap_two
$ sudo zfs rename Root/swap Root/swap_bak
$ sudo zfs rename Root/swap_two Root/swap
$ sudo mkswap -f /dev/zvol/Root/swap
$ sudo swapon /dev/zvol/Root/swap

이 항목이 다음에 있는지 확인하십시오 /etc/fstab.

/dev/zvol/Root/swap none swap discard 0 0

그런 다음 재부팅하고 작은 레거시 스왑을 제거하십시오.

$ sudo zfs destroy Root/swap_bak

이것이 효과가 있는 것 같지만 여전히 최대 절전 모드로 전환할 수 없습니다.

$ sudo systemctl hibernate
Failed to hibernate system via logind: Sleep verb "hibernate" not supported

그러므로 나는 여전히 어떤 조언에도 열려 있습니다. 어쩌면 전용 resume매개변수가 필요할 수도 있습니다 GRUB_CMDLINE_LINUX_DEFAULT.

답변1

결국 그 이유는 ZFS와 관련이 없었습니다. 스왑 크기를 조정한 후에도 최신 Ubuntu 버전에서는 단순히 비활성화되었기 때문에 작동하지 않았습니다(그래도 재검토될 거야).

이 문제를 해결하려면 최대 절전 모드를 활성화해야 합니다.

  1. com.ubuntu.desktop.pkla편집기에서 엽니다 .
$ sudo vim /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
# or on some machines
$ sudo vim /etc/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla

항목을 검색 Disable hibernate by default in upower하고 Disable hibernate by default in logindResultActive값을 로 변경합니다 yes.

재부팅하고 결과를 테스트하십시오.

$ sudo systemctl hibernate
# or
$ sudo pm-hibernate

그래도 작동하지 않으면 Fast bootBIOS Secure boot(주목:그것은매우새로운 컴퓨터에서는 그렇게 해야 할 것 같습니다).

테스트 결과 더 이상 오류가 발생하지 않으면 Ubuntu 설정에서 특정 작업에 최대 절전 모드를 할당할 수도 있습니다. 예를 들어 전원 버튼을 누를 때.

전원 - 일시 중지 및 전원 - 버튼 전원 버튼 동작 - 최대 절전 모드

답변2

스왑(파일 시스템의 파일 또는 전체 zvol)에 ZFS를 사용하는 것은 이미나쁜 생각, 그것으로 동면하는 것은 말할 것도 없습니다. 내 유일한 조언은완전히 포기해, ZFS는 이러한 목적으로 구축되지 않았습니다.

ZFS는로그 구조 파일 시스템, 여기서 파일의 블록(범위)은 언제든지 고정되지 않고 쓰기마다 변경됩니다(덮어쓰기 금지 규칙). 그러나 스왑 하위 시스템에서는 스왑 파일과 블록 간의 간단하고 이해하기 쉬운 매핑과 기본 디스크 섹터에 대한 직접 액세스를 기대하는데, 이는 둘 다 로그 구조 파일 시스템의 특성이 아닙니다. 또 다른 LFS인 Btrfs는 다음과 같은 스왑 파일을 지원합니다.수많은 제한, 단지 그것을 만들기 위해쓸 수 있는, ZFS는 O_DIRECT. 교환하는 이유가 있어요파티션스왑보다 더 나은 성능과 안정성을 제공합니다.파일.

ZFS는 트랜잭션 안전을 보장하기 위해 많은 내부 장부를 수행하며 풍부한 메모리에 크게 의존합니다. 메모리에 대한 디스크 지원 확장 기능을 기본 목적으로 하는 스왑용 ZFS를 사용하는 경우 로드가 높거나 스왑 압력이 높은 경우 ZFS와 메모리 관리 하위 시스템 간에 포지티브 피드백 루프가 발생합니다. 예를 들어 이로 인해 전체 시스템이 소프트 잠금될 수 있습니다.

더 나아가 swap-on-ZFS를 사용하여 최대 절전 모드로 전환하면 ZFS의 내부 데이터 구조가 조만간 미쳐버릴 것입니다. 최대 절전 모드에서 다시 시작하는 것은 디스크에서 로드된 정확하고 일관된 메모리에 의존하는 반면 ZFS도 잘 구성된 정보에 의존하기 때문입니다. 통합 디스크 데이터를 제공하는 메모리 데이터 구조.

답변3

스왑 파티션의 크기를 늘리고 최대 절전 모드에 사용하는 프로세스

  1. 스왑 파티션 생성

    스왑 파티션 활성화

    최대 절전 모드에서 새 스왑 파티션이 작동하도록 만들기(선택 사항)

    스왑 파티션 생성 Ubuntu 설치 CD로 부팅하고 지금 Ubuntu를 실행하는 옵션을 선택하십시오. 시스템 -> GParted 파티션 편집기로 이동하십시오.

스왑 파티션을 삭제하고, 그 안에 아무것도 없으면 이를 포함하는 확장 파티션도 삭제합니다. (기적으로 여기에서 스왑 파티션의 크기를 조정할 수 있다면 당신의 삶이 나보다 훨씬 쉬울 것이라고 생각합니다.) 새 스왑을 원하는 만큼 기본 파티션의 크기를 줄입니다. 안전을 위해 2x RAM + 500MB를 채굴하세요). 가장 쉬운 방법은 "다음 여유 공간" 필드에 스왑하려는 공간의 양을 채우는 것입니다. 지금 생성된 여유 공간에서 new를 선택하고 linux-swap을 입력하면 파티션 이름을 지정할 수 있습니다. 마음에 들면 "스왑"을 누르세요.적용하다변경 사항을 디스크에 기록하는 버튼(체크 표시여야 함) 완료되면 Ubuntu로 다시 재부팅합니다. 스왑 파티션 활성화(스왑이 기본 하드 드라이브에 있는 경우 여기서는 아무것도 할 필요가 없습니다.) 이제 필요한 작업은 다음과 같습니다. 스왑이 있는 파티션과 해당 UUID가 무엇인지 확인합니다. UUID?! 당신은 말합니까? 이는 파티션의 범용 고유 식별자이므로 디스크 추가 등으로 인해 부팅 간 마운트 지점이 다르더라도 이를 참조할 수 있습니다.

터미널을 열고 gksu gparted &를 실행하고 루트 비밀번호를 입력하세요. &를 사용하면 명령줄에 계속 액세스하면서 이 프로세스를 실행할 수 있습니다.

스왑 파티션을 마우스 오른쪽 버튼으로 클릭하고 다음을 선택하십시오.정보. 당신은그리고UUID거기에 나열되어 있습니다. 추가 참조를 위해 이 내용을 열어 두십시오. gksu gedit /etc/fstab &를 실행하고 다음 줄을 찾으세요.교환그 안에. 공백이나 탭으로 구분된 세 번째 열이어야 합니다. 경로나 UUID를 사용하여 Linux에게 스왑 파티션을 찾을 위치를 알려줄 수 있습니다. 파티션을 이동하거나 디스크가 sda 등이 아닌 sdb가 되어도 UUID는 일정하게 유지되므로 권장합니다. 적절하게 편집하고 파일을 저장합니다. UUID를 사용한 경우(물론 UUID를 대신 사용하여) 라인은 다음과 같아야 합니다.

UUID=41e86209-3802-424b-9a9d-d7683142dab7 없음 스왑 sw 0 0

또는 다음 경로를 사용한 경우: /dev/sda2 none swap sw 0 0

파일을 저장합니다. 이 명령을 사용하여 새 스왑 파티션을 활성화합니다.

sudo swapon --all

또는

$ sudo swapon --all --verbose

swapon on /dev/sda2
swapon: /dev/sda2: found swap signature: version 1, page-size 4, same byte order
swapon: /dev/sda2: pagesize=4096, swapsize=2147483648, devsize=2147483648
Confirm that the swap partition exists.

$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/sda2                               partition       2097148 0       -1

재부팅하여 시작 시 새 스왑이 제대로 활성화되는지 확인하세요. 최대 절전 모드에서 스왑 파티션이 작동하도록 만들기(선택 사항) '정보: 12.04에서는 작동하지 않습니다. 12.04에서는 최대 절전 모드에서 다르게 작동합니다.'

터미널을 다시 열고 cat /proc/swap을 실행하면 거기에 나열된 스왑 파티션 경로가 표시되기를 바랍니다. 그렇지 않다면 위의 단계에서 문제가 발생한 것입니다. 내 결과는 다음과 같습니다.

파일 이름 유형 사용된 크기 우선 순위 /dev/sda2 파티션 2676732 73380 -1 gksu gedit /etc/default/grub & 부트 로더 구성 가져오기

GRUB_CMDLINE_LINUX="" 행을 찾아 다음과 같은지 확인하고(물론 UUID 사용) GRUB_CMDLINE_LINUX="resume=UUID=41e86209-3802-424b-9a9d-d7683142dab7" 파일을 저장합니다.

sudo update-grub그리고 끝날 때까지 기다리세요

gksu gedit /etc/initramfs-tools/conf.d/resume & 내용을 확인하세요.resume=UUID=41e86209-3802-424b-9a9d-d7683142dab7 (물론 UUID가 내 자리에 있음). 파일을 저장하세요!

sudo update-initramfs -u

재부팅! 이제 최대 절전 모드로 전환하고 다시 시작할 수 있습니다!

관련 정보