
머리말
실수해서 설치했어요암호화된 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/swap
1.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 버전에서는 단순히 비활성화되었기 때문에 작동하지 않았습니다(그래도 재검토될 거야).
이 문제를 해결하려면 최대 절전 모드를 활성화해야 합니다.
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 logind
각 ResultActive
값을 로 변경합니다 yes
.
재부팅하고 결과를 테스트하십시오.
$ sudo systemctl hibernate
# or
$ sudo pm-hibernate
그래도 작동하지 않으면 Fast boot
BIOS Secure boot
(주목:그것은매우새로운 컴퓨터에서는 그렇게 해야 할 것 같습니다).
테스트 결과 더 이상 오류가 발생하지 않으면 Ubuntu 설정에서 특정 작업에 최대 절전 모드를 할당할 수도 있습니다. 예를 들어 전원 버튼을 누를 때.
답변2
스왑(파일 시스템의 파일 또는 전체 zvol)에 ZFS를 사용하는 것은 이미나쁜 생각, 그것으로 동면하는 것은 말할 것도 없습니다. 내 유일한 조언은완전히 포기해, ZFS는 이러한 목적으로 구축되지 않았습니다.
ZFS는로그 구조 파일 시스템, 여기서 파일의 블록(범위)은 언제든지 고정되지 않고 쓰기마다 변경됩니다(덮어쓰기 금지 규칙). 그러나 스왑 하위 시스템에서는 스왑 파일과 블록 간의 간단하고 이해하기 쉬운 매핑과 기본 디스크 섹터에 대한 직접 액세스를 기대하는데, 이는 둘 다 로그 구조 파일 시스템의 특성이 아닙니다. 또 다른 LFS인 Btrfs는 다음과 같은 스왑 파일을 지원합니다.수많은 제한, 단지 그것을 만들기 위해쓸 수 있는, ZFS는 O_DIRECT
. 교환하는 이유가 있어요파티션스왑보다 더 나은 성능과 안정성을 제공합니다.파일.
ZFS는 트랜잭션 안전을 보장하기 위해 많은 내부 장부를 수행하며 풍부한 메모리에 크게 의존합니다. 메모리에 대한 디스크 지원 확장 기능을 기본 목적으로 하는 스왑용 ZFS를 사용하는 경우 로드가 높거나 스왑 압력이 높은 경우 ZFS와 메모리 관리 하위 시스템 간에 포지티브 피드백 루프가 발생합니다. 예를 들어 이로 인해 전체 시스템이 소프트 잠금될 수 있습니다.
더 나아가 swap-on-ZFS를 사용하여 최대 절전 모드로 전환하면 ZFS의 내부 데이터 구조가 조만간 미쳐버릴 것입니다. 최대 절전 모드에서 다시 시작하는 것은 디스크에서 로드된 정확하고 일관된 메모리에 의존하는 반면 ZFS도 잘 구성된 정보에 의존하기 때문입니다. 통합 디스크 데이터를 제공하는 메모리 데이터 구조.
답변3
스왑 파티션의 크기를 늘리고 최대 절전 모드에 사용하는 프로세스
스왑 파티션 생성
스왑 파티션 활성화
최대 절전 모드에서 새 스왑 파티션이 작동하도록 만들기(선택 사항)
스왑 파티션 생성 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
재부팅! 이제 최대 절전 모드로 전환하고 다시 시작할 수 있습니다!