Prefácio
Cometi um erro e instalei o Ubuntu 20.04 LTS com uma partição ZFS / OpenZFS criptografadaroot
na minha área de trabalho produtiva em uma configuração de inicialização dupla (consulte a tabela de partições abaixo). Mas não prestei a devida atenção no tutorial que estava seguindo e agora parece que tenho uma partição Swap de 4G embora tenha 32G de RAM ( EDIT: descobri como consigo aumentar o Swap mas ainda não pode entrar em hibernação - veja abaixo ). Portanto, não posso colocar esta máquina em hibernação.
Qual é a melhor maneira de resolver esse problema, para que eu possa colocar essa máquina em hibernação?
Estado atual
$ 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 -
O que eu tentei
Criando um arquivo de troca
Eu pensei que um arquivo de troca poderia ser uma solução fácil, mas obviamente estava errado:
$ 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.
Então eu acho que deveria aumentar a partição swap. Também não está claro para mim por swapon
que as alegações de que a partição swap possui, 4G
embora zfs get all Root/swap
diga que 1.08T
estão disponíveis.
Qualquer coisa com GParted
O GParted não reconhecerá muito. Isso pode estar relacionado ao bug em os-prober
( GParted issue 14 , Debian bug 888114 , os-prober issue 1848496 , openzfs issues 9801 e 9069 )
Substituindo a pequena partição Swap (=aumentando a partição Swap no ZFS)
O comando de criação foi inspirado em um comentário no GitHub, mas lembre -se de não usar-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
garantindo que esta entrada esteja em /etc/fstab
:
/dev/zvol/Root/swap none swap discard 0 0
em seguida, reinicie e remova a pequena troca herdada:
$ sudo zfs destroy Root/swap_bak
Embora isso pareça ter funcionado, ainda não consigo hibernar:
$ sudo systemctl hibernate
Failed to hibernate system via logind: Sleep verb "hibernate" not supported
Portanto, ainda estou aberto a qualquer conselho. Talvez precise de um resume
parâmetro dedicado em GRUB_CMDLINE_LINUX_DEFAULT
?
No final, o motivo não estava relacionado ao ZFS. Mesmo depois de redimensionar a troca, ela não funcionou porque está simplesmente desabilitada nas versões mais recentes do Ubuntu ( será reconsiderada ).
Para resolver isso, você deve ativar a hibernação.
com.ubuntu.desktop.pkla
em um editor:Procure as entradas
Disable hibernate by default in upower
eDisable hibernate by default in logind
altere cadaResultActive
valor parayes
.Reinicie e teste o resultado com
Se ainda não funcionar, talvez seja necessário desativar coisas como
Fast boot
eSecure boot
em seu BIOS ( ATENÇÃO: é muito provável que você precise fazer isso em máquinas mais recentes).Se o teste não resultar mais em erro, você também poderá atribuir Hibernações a determinadas ações nas configurações do Ubuntu. Por exemplo, ao pressionar o botão liga / desliga.
processo para aumentar o tamanho da partição de troca e usá-la para hibernação
Criando a partição swap
Ativando a partição swap
Fazendo a nova partição swap funcionar para hibernar (opcional)
Criando a partição swap Inicialize no CD de instalação do Ubuntu e escolha a opção para executar o Ubuntu agora Vá para sistema -> GParted Partition Editor
Exclua a partição swap e, se não houver mais nada nela, a partição estendida que a contém. (Se por algum milagre você for capaz de redimensionar sua partição swap a partir daqui, imagino que sua vida será muito mais fácil que a minha.) mine 2x RAM + 500MB apenas para ser seguro). A maneira mais fácil de fazer isso é preencher a quantidade de espaço que você deseja que o swap tenha no campo "espaço livre seguinte" No espaço livre que foi criado agora, escolha novo, digite linux-swap e você poderá nomear a partição "trocar" se você gosta Clique no botão Aplicarbotão (deve ser uma marca de seleção) para gravar as alterações no disco Quando terminar, reinicie novamente no Ubuntu Ativando a partição de troca (Se sua troca estiver em seu disco rígido principal, você não precisa fazer nada aqui.) Agora você precisa para descobrir em qual partição sua troca está e qual é seu UUID. UUI?! você diz? Bem, esse é o identificador exclusivo universal para a partição, para que você possa referenciá-lo mesmo que esteja em um ponto de montagem diferente do boot-to-boot devido à adição de discos, etc.
Abra um terminal e execute gksu gparted & e digite sua senha de root. O & permite que esse processo seja executado enquanto ainda fornece acesso à linha de comando.
Clique com o botão direito do mouse em sua partição de troca e escolha Informações . Você deve ver o caminho e o UUID listados lá. Mantenha isso aberto para referência futura. Execute gksu gedit /etc/fstab & e procure a linha que contém swap . Deve ser a terceira coluna, separada por espaços ou tabulações. Você pode usar o caminho ou o UUID para informar ao Linux onde encontrar sua partição de troca. Eu recomendo o UUID porque ele permanecerá constante mesmo se você mover a partição ou o disco de alguma forma se tornar sdb em vez de sda ou algo assim. Faça as edições apropriadas e salve o arquivo. Sua linha deve se parecer com isso se você usou UUID (com seu UUID, é claro):
UUID=41e86209-3802-424b-9a9d-d7683142dab7 nenhum troca sw 0 0
ou isso se você usou o caminho: /dev/sda2 none swap sw 0 0
Salve o arquivo. Habilite a nova partição de troca com este comando.
OU
Reinicialize para certificar-se de que a nova troca seja ativada corretamente na inicialização Fazendo a partição de troca funcionar para hibernar (opcional) 'INFO: Isso não funcionará para 12.04, retome a partir da hibernação de forma diferente em 12.04.'
Abra um Terminal novamente e execute cat /proc/swaps e espero que você veja o caminho para sua partição swap listada lá. Se não, as chances são de que algo deu errado nas etapas acima. Aqui está minha saída:
Nome do arquivo Tipo Tamanho Usado Prioridade partição /dev/sda2 2676732 73380 -1 gksu gedit /etc/default/grub & para puxar a configuração do carregador de inicialização
Procure a linha GRUB_CMDLINE_LINUX="" e verifique se está assim (usando seu UUID é claro) GRUB_CMDLINE_LINUX="resume=UUID=41e86209-3802-424b-9a9d-d7683142dab7" e salve o arquivo
sudo update-grub
e espere terminargksu gedit /etc/initramfs-tools/conf.d/resume & e certifique-se de que seu conteúdo seja resume=UUID=41e86209-3802-424b-9a9d-d7683142dab7 (com seu UUID, é claro, no lugar do meu). Salve o arquivo!
Reinício! Agora você deve ser capaz de hibernar e retomar!