Prefácio

Prefácio

Prefácio

Cometi um erro e instaleirootUbuntu 20.04 LTS com partição ZFS/OpenZFS criptografadana minha área de trabalho produtiva em uma configuração de inicialização dupla (veja 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 (EDITAR: Descobri como consigo aumentar o Swap mas ainda não consigo entrar em hibernação — veja abaixo). Portanto não posso colocar esta máquina em hibernação.

Qual a melhor forma de resolver esse problema, para que eu possa colocar esta 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

Achei 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 acho que deveria aumentar a partição swap. Também não está claro para mim por que swaponas afirmações de que a partição swap 4Gdiz zfs get all Root/swapque 1.08Testão disponíveis.

Qualquer coisa com GParted

O GParted não reconhecerá muito. Isso pode estar relacionado ao bug em os-prober(Edição 14 do GParted,Bug do Debian 888114,problema os-prober 1848496, problemas do openzfs9801e9069)

insira a descrição da imagem aqui

Substituindo a pequena partição Swap (=aumentando a partição Swap no ZFS)

O comando de criação foi inspirado emum comentário no GitHubmas você deve ter em mentenãousar-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 legada:

$ 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 para qualquer conselho. Talvez precise resumede um parâmetro dedicado GRUB_CMDLINE_LINUX_DEFAULT?

Responder1

No final das contas, 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 (mas será reconsiderado).

Para resolver isso, você deve ativar a hibernação.

  1. Abra com.ubuntu.desktop.pklaem um editor:
$ 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

Pesquise as entradas Disable hibernate by default in upowere Disable hibernate by default in logindaltere cada ResultActivevalor para yes.

Reinicie e teste o resultado com

$ sudo systemctl hibernate
# or
$ sudo pm-hibernate

Se ainda não funcionar, talvez seja necessário desativar coisas como Fast boote Secure bootem seu BIOS (ATENÇÃO:isso émuitoprovavelmente você terá que fazer isso em máquinas mais novas).

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.

Ligar — Suspender e Ligar — Botão Comportamento do botão liga/desliga — Hibernar

Responder2

Usar o ZFS para swap (um arquivo em um sistema de arquivos ou um zvol inteiro) já éUma má ideia, muito menos hibernar com ele. Meu único conselho seriadesistir completamente, o ZFS não foi criado para essa finalidade.

ZFS é umsistema de arquivos estruturado em log, onde os blocos (extensões) de um arquivo não são corrigidos em nenhum momento, mas sim alterados a cada gravação (a regra de não substituição). O subsistema swap, entretanto, espera mapeamentos simples e inteligíveis entre o arquivo swap e os blocos, e acesso direto aos setores de disco subjacentes, nenhum dos quais é uma característica dos sistemas de arquivos estruturados em log. Btrfs, sendo outro LFS, suporta swapfiles cominúmeras restrições, apenas para fazer issoutilizável, enquanto o ZFS nem sequer suporta O_DIRECT. Há uma razão para essa trocapartiçõestêm melhor desempenho e são mais confiáveis ​​que swaparquivos.

O ZFS faz muita contabilidade interna para garantir a segurança transacional e depende muito de memória abundante. Se você usar o ZFS para troca, cujo objetivo principal é servir como uma extensão de memória apoiada em disco, isso causará um loop de feedback positivo entre o ZFS e o subsistema de gerenciamento de memória sob alta carga ou alta pressão de troca. Isto pode levar, por exemplo, ao bloqueio suave de todo o sistema.

Se você for mais longe e hibernar com swap-on-ZFS, as estruturas de dados internas do ZFS irão, mais cedo ou mais tarde, enlouquecer, já que a saída da hibernação depende de memória correta e consistente carregada do disco, enquanto o ZFS também depende de informações bem formadas. estruturas de dados de memória para fornecer dados integrais do disco.

Responder3

processo para aumentar o tamanho da partição swap e usá-la para hibernação

  1. Criando a partição swap

    Ativando a partição swap

    Fazendo a nova partição swap funcionar para hibernação (opcional)

    Criando a partição swap Inicialize no CD de instalação do Ubuntu e escolha a opção de 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ê conseguir redimensionar sua partição swap a partir daqui, imagino que sua vida será muito mais fácil que a minha.) Diminua o tamanho de sua partição primária pela quantidade que você deseja que seu novo swap tenha (eu fiz mine 2x RAM + 500 MB só por segurança). A maneira mais fácil de fazer isso é preencher a quantidade de espaço que você deseja que o swap esteja no campo "espaço livre a seguir". No espaço livre que foi criado agora, escolha novo, digite linux-swap e você poderá nomear a partição "troque" se quiser Acerte oAplicarbotã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 swap (se o seu swap estiver no disco rígido principal, você não precisa fazer nada aqui.) Agora você precisa para descobrir em qual partição seu swap está e qual é seu UUID. UUID?! você diz? Bem, esse é o identificador universalmente exclusivo da partição, para que você possa referenciá-lo mesmo que esteja em um ponto de montagem diferente de inicialização para inicialização devido à adição de discos, etc.

Abra um terminal e execute gksu gparted & e digite sua senha root. O & permite que esse processo seja executado enquanto ainda dá acesso à linha de comando.

Clique com o botão direito na sua partição swap e escolhaInformação. Você deveria ver oCaminhoeUUIDlistado lá. Mantenha-o aberto para referência futura. Execute gksu gedit /etc/fstab & e procure a linha que contémtrocariniciar. 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 swap. Eu recomendo o UUID porque ele permanecerá constante mesmo se você mover a partição ou se o disco de alguma forma se tornar sdb em vez de sda ​​ou algo parecido. Faça as edições apropriadas e salve o arquivo. Sua linha deve ser parecida com esta se você usou UUID (com seu UUID, é claro):

UUID=41e86209-3802-424b-9a9d-d7683142dab7 nenhum swap sw 0 0

ou isto se você usou o caminho: /dev/sda2 none swap sw 0 0

Salve o arquivo. Habilite a nova partição swap com este comando.

sudo swapon --all

OU

$ 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

Reinicialize para garantir que o novo swap seja ativado corretamente na inicialização Fazendo a partição swap funcionar para hibernação (opcional) 'INFO: Isso não funcionará para 12.04, a retomada do hibernação funcionará de maneira diferente em 12.04.'

Abra um Terminal novamente e execute cat /proc/swaps e esperamos que você veja o caminho para sua partição swap listada lá. Caso contrário, é provável que algo tenha dado errado nas etapas acima. Aqui está minha saída:

Nome do arquivo Tipo Tamanho usado Prioridade /dev/sda2 partição 2676732 73380 -1 gksu gedit /etc/default/grub & para obter a configuração do carregador de boot

Procure a linha GRUB_CMDLINE_LINUX="" e certifique-se de que esteja assim (usando seu UUID, é claro) GRUB_CMDLINE_LINUX="resume=UUID=41e86209-3802-424b-9a9d-d7683142dab7" e salve o arquivo

sudo update-grube espere terminar

gksu 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!

sudo update-initramfs -u

Reinício! Agora você deve conseguir hibernar e retomar!

informação relacionada