どのようにしてスワップファイルにするものを消去せずに/ swapfileをゼロフィルできますか?


8

仮想ゲストをバックアップする前にディスク容量を最適化するために実行するスクリプトがあります(実際には、どのハイパーバイザーを使用してもそれほど問題ではありません)。

最新のUbuntuバージョン(18.04など)/swapfileでは、デフォルトでパーティションではなくパーティションを使用するようです。それも結構です。

ただし、スワップファイルとそれを含むルートパーティションをゼロフィルしたいと思います。

スワップパーティションでは、既存$UUIDのものをスワップパーティションから抽出する方法が常にあり、パーティションをゼロフィルした後、実行mkswap -U $UUIDして上記のスワップパーティションを再作成するため、これは比較的簡単でした。

しかし、/swapfile私はそれを行う方法がわかりません。で/swapfileUUIDを使用してマウントできないことは承知していますが/etc/fstab、それでもUUIDを保持したいと思います。

そのため、続行するには次のいずれかが必要です。

  1. スワップパーティションにする構造をワイプせずにスワップファイルをゼロフィルできるメソッドが必要です(つまり、実行する必要がありませんmkswap -U $UUID)。
  2. 既存のUUIDをスワップファイルから取得するためのメソッドが必要です(パーティションを使用してから参照blkidするまで何でもできるパーティションではあり/dev/disk/by-uuid/$UUIDません)。

回答:


15
  1. これはスワップファイルを再作成するほど完全にクリアしませんが、最初の4KiB(厳密には、アーキテクチャに依存する最初のページ)をスキップした後にクリアすると、どの構造にも触れません。スワップファイルを識別します。

  2. blkid スワップファイルでもうまくいきます:

    $ mkswap swap
    Setting up swapspace version 1, size = 512 MiB (536866816 bytes)
    no label, UUID=7916b81f-1faa-4b7d-84ef-b0bf2f75dbbc
    
    $ blkid swap
    swap: UUID="7916b81f-1faa-4b7d-84ef-b0bf2f75dbbc" TYPE="swap"
    

ヘッダー形式はカーネルで定義されています。古い形式は最初のページの終わりに魔法の値があり、新しい形式はそれを1KiBの空き領域と組み合わせ、次にいくつかのフィールド(バージョン、サイズ、不良ページ、UUID、ラベル)すべてが最初のページ内に快適に収まります。


すごい、私がStackExchangeサイトでこれまでに受け取った最も速い答えを伝えます。ありがとう。率直に言っblkidて、パラメーターを使用したことはありません。たとえば、ddオフセットを使用するのではなく、それを行うべきだと思います。
0xC0000022L

3
そうです、UUIDを読み取ってスワップファイルを再作成する方が簡単なオプションでしょう。
スティーブンキット2018

@ 0xC0000022Lは、の出力形式オプションも調べますblkid。バージョンによっては、blkid swap -o value -s uuidUUIDのみを抽出できる場合があります。
-muru、

@muruのおかげで、すでに行なったし、を選択しましたblkid -o export <file>を通じてどのIパイプsed付加するlocal 各ラインにして、evalバッシュを使用します。このようにして、関数の値をローカル環境変数としてすぐに使用できます。
0xC0000022L 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.