序文

序文

序文

間違えてインストールしてしまいました暗号化された ZFS / OpenZFSrootパーティションを備えた Ubuntu 20.04 LTSデュアルブート構成の私の生産的な作業用デスクトップで(下のパーティションテーブルを参照)。しかし、私が従っていたチュートリアルに十分な注意を払っていなかったため、32GのRAMがあるにもかかわらず、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.

したがって、むしろ swap パーティションを増やす必要があると思います。swap パーティションが使用可能であると表示されているのにswapon、swap パーティションが使用可能であると主張する理由もわかりません。4Gzfs get all Root/swap1.08T

GParted に関するもの

os-proberGParted はあまり認識しません。これは(のバグに関連している可能性があります。GParted 問題 14Debian バグ 888114os-prober の問題 1848496、openzfs の問題9801そして9069

ここに画像の説明を入力してください

小さなスワップパーティションを置き換える(=ZFS上のスワップパーティションを増やす)

作成コマンドは、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 upowerDisable hibernate by default in logindそれぞれのResultActive値を に変更しますyes

再起動して結果をテストします

$ sudo systemctl hibernate
# or
$ sudo pm-hibernate

それでもうまくいかない場合は、BIOSでFast bootやなどを無効にする必要があるかもしれません(Secure boot注意:それはとても(新しいマシンではそうする必要がある可能性が高いです)。

テストでエラーが発生しなくなった場合は、Ubuntu 設定で特定のアクションに休止状態を割り当てることもできます。たとえば、電源ボタンを押すときなどです。

電源 - サスペンド & 電源 - ボタン 電源ボタンの動作 - 休止状態

答え2

ZFSをスワップ(ファイルシステム上のファイルまたはzvol全体)に使用することはすでに悪い考え冬眠するなんてもってのほかだ。私の唯一のアドバイスは完全に諦めるZFS はこの目的のために構築されていません。

ZFSはログ構造化ファイルシステムでは、ファイルのブロック(エクステント)は常に固定ではなく、書き込みごとに変更されます(上書き禁止ルール)。ただし、スワップサブシステムでは、スワップファイルとブロック間のシンプルでわかりやすいマッピングと、基礎となるディスクセクターへの直接アクセスが期待されますが、どちらもログ構造化ファイルシステムの特徴ではありません。別のLFSであるBtrfsは、スワップファイルをサポートしています。多数の制限、それを作るためだけに使用可能ZFSはをサポートしていませんO_DIRECT。スワップがパーティションスワップよりもパフォーマンスが良く、信頼性が高いファイル

ZFS はトランザクションの安全性を保証するために多くの内部記録を行っており、大量のメモリに大きく依存しています。メモリのディスクバックアップ拡張として機能することを主な目的とするスワップに ZFS を使用すると、高負荷または高スワップ圧力下では、ZFS とメモリ管理サブシステムの間に正のフィードバック ループが発生します。これにより、たとえばシステム全体がソフト ロックされる可能性があります。

さらに進んで swap-on-ZFS で休止状態になると、ZFS の内部データ構造は遅かれ早かれおかしくなります。休止状態からの再開にはディスクから読み込まれた正確で一貫性のあるメモリが依存するのに対し、ZFS は完全なディスク データを提供するために整形式のメモリ内データ構造にも依存するからです。

答え3

スワップパーティションのサイズを増やして休止状態に使用するプロセス

  1. スワップパーティションの作成

    スワップパーティションの有効化

    新しいスワップ パーティションを休止状態で動作させる (オプション)

    スワップパーティションを作成する UbuntuインストールCDを起動し、Ubuntuを今すぐ実行するオプションを選択します システム -> GPartedパーティションエディタに移動します

スワップ パーティションを削除し、他に何もない場合は、スワップ パーティションを保持している拡張パーティションも削除します。(奇跡的にここからスワップ パーティションのサイズを変更できれば、私よりもずっと楽になると思います。) プライマリ パーティションのサイズを、新しいスワップにしたいサイズだけ減らします (私は安全のために 2 倍の RAM + 500MB にしました)。これを行う最も簡単な方法は、スワップにしたいスペースの量を [次の空き領域] フィールドに入力することです。作成された空き領域で、新規を選択し、linux-swap と入力して、必要に応じてパーティションに「swap」という名前を付けます。適用するボタン(チェックマークが付いているはずです)をクリックして、変更をディスクに書き込みます。完了したら、Ubuntu を再起動して、スワップ パーティションをアクティブにします(スワップがプライマリ ハード ドライブ上にある場合は、ここで何もする必要はありません)。次に、スワップがどのパーティションにあるか、およびその UUID が何であるかを確認する必要があります。UUID ですか? これはパーティションの Universally Unique IDentifier なので、ディスクの追加などにより、ブートごとに異なるマウント ポイントにある場合でも参照できます。

ターミナルを開いて gksu gparted & を実行し、ルート パスワードを入力します。& を使用すると、コマンド ラインにアクセスしながらこのプロセスを実行できます。

スワップパーティションを右クリックして、情報. 表示されるはずですパスそして言語そこにリストされています。今後の参照のためにこれを開いたままにしておいてください。gksu gedit /etc/fstab & を実行し、スワップそこにあります。スペースまたはタブで区切られた 3 番目の列にあるはずです。パスまたは UUID を使用して、Linux にスワップ パーティションの場所を指示できます。パーティションを移動したり、ディスクが何らかの理由で sda ではなく sdb になったりしても一定のままであるため、UUID をお勧めします。適切な編集を行ってファイルを保存します。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/swaps を実行すると、そこにスワップ パーティションへのパスがリストされるはずです。そうでない場合は、上記の手順で何か問題が発生した可能性があります。これが私の出力です。

ファイル名 タイプ サイズ 使用 優先度 /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 の代わりに自分の UUID を入力してください)。ファイルを保存します。

sudo update-initramfs -u

再起動してください。これで休止状態から再開できるようになります。

関連情報