1 wipefsコマンドとは?
デバイスからファイルシステム,RAID,パーティションテーブルのシグネチャを消去(*)するコマンドです。ファイルシステム自体や、ファイルシステムのデータは消去しません。
(*) シグネチャを0x00で置き換えるという意味です。
ファイルシステム | シグネチャ | 備考 |
---|---|---|
ext3 | 0xEF53 | 16進数でef 53です |
ext4 | 0xEF53 | 16進数でef 53です |
xfs | XFSB | 16進数で58 46 53 42です |
2 検証環境
AlmaLinux版数は以下のとおりです。
[root@kvm ~]# cat /etc/redhat-release AlmaLinux release 8.6 (Sky Tiger)
カーネル版数は以下のとおりです。
[root@kvm ~]# uname -r 4.18.0-372.9.1.el8.x86_64
3 インストール方法
util-linuxパッケージをインストールします。
[root@server ~]# dnf -y install util-linux
wipefsコマンドの版数は以下のとおりです。
[root@server ~]# wipefs -V wipefs from util-linux 2.32.1
ファイルシステムの中身を16進表示するため、xxdというコマンドを使います。xxdは、以下のようにしてインストールします。
[root@server ~]# dnf -y install vim-common
xxdコマンドの版数は以下のとおりです。
[root@server ~]# xxd -v xxd V1.10 27oct98 by Juergen Weigert
4 オプション一覧
オプションは以下のとおりです。
[root@server ~]# wipefs -h 使い方: wipefs [オプション] <デバイス> シグネチャをデバイスから完全に削除します。 オプション: -a, --all wipe all magic strings (BE CAREFUL!) -b, --backup create a signature backup in $HOME -f, --force force erasure -i, --noheadings don't print headings -J, --json use JSON output format -n, --no-act do everything except the actual write() call -o, --offset <num> offset to erase, in bytes -O, --output <list> COLUMNS to display (see below) -p, --parsable print out in parsable instead of printable format -q, --quiet suppress output messages -t, --types <list> limit the set of filesystem, RAIDs or partition tables -h, --help このヘルプを表示します -V, --version バージョンを表示します 利用可能な出力の列: UUID partition/filesystem UUID LABEL ファイルシステムのラベル LENGTH magic string length TYPE superblok type OFFSET magic string offset USAGE type description DEVICE ブロックデバイス名 詳しくは wipefs(8) をお読みください。
5 シグネチャを表示する方法
wipefsをオプションなしで実行すると、ファイルシステムのシグネチャとオフセットを表示します。
まず、lsblkコマンドを実行して、ブロックデバイス一覧を表示します。なお、lsblkコマンドの使い方は、lsblkコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# lsblk -fip NAME FSTYPE LABEL UUID MOUNTPOINT /dev/loop0 squashfs /var/lib/snapd/snap/httpstat/1 /dev/loop1 squashfs /var/lib/snapd/snap/core/13425 /dev/sr0 /dev/vda |-/dev/vda1 xfs 59925ca2-a617-48a4-9f18-2f7680ac70d3 /boot |-/dev/vda2 swap 35aef27e-b0f8-4704-b3fd-6a5d637c9049 [SWAP] `-/dev/vda3 xfs cfc61269-00bd-4e42-bce2-b0041bfdab9a /
/dev/vdaに対してwipefsコマンドを実行します。0x1feの位置にシグネチャとして"dos"が設定されていることがわかります。
・OFFSET:シグネチャが設定されている場所を表す。
・TYPE:シグネチャを表す。
[root@server ~]# wipefs /dev/vda DEVICE OFFSET TYPE UUID LABEL vda 0x1fe dos
/dev/vda1に対して、wipefsコマンドを実行します。0x00の位置にシグネチャとして"xfs"が設定されていることがわかります。
[root@server ~]# wipefs /dev/vda1 DEVICE OFFSET TYPE UUID LABEL vda1 0x0 xfs 59925ca2-a617-48a4-9f18-2f7680ac70d3
/dev/vda2に対して、wipefsコマンドを実行します。0xff6 の位置にシグネチャとして"swap"が設定されていることがわかります。
[root@server ~]# wipefs /dev/vda2 DEVICE OFFSET TYPE UUID LABEL vda2 0xff6 swap 35aef27e-b0f8-4704-b3fd-6a5d637c9049
6 シグネチャを消去する方法(-a)
OSが入っているデバイスからシグネチャを誤って消去しないように、テスト用のデバイスを作成します。
6.1 事前準備
ループデバイスに使用するファイルを作成します。fallocateコマンドは、ファイルの作り方 - hana_shinのLinux技術ブログを参照してください。
ファイルサイズが1Gのファイルを作成します。
[root@server ~]# fallocate -l 1G disk.img
作成したファイルを確認します。
[root@server ~]# ls -l disk.img -rw-r--r--. 1 root root 1073741824 2月 3 21:02 disk.img
作成したファイルをループデバイスとして登録します。
[root@server ~]# losetup -f /root/disk.img
ループデバイス一覧を確認します。 作成したファイルがループデバイス(/dev/loop2)として登録されていることがわかります。
[root@server ~]# losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC /dev/loop1 0 0 1 1 /var/lib/snapd/snaps/core_13425.snap 0 512 /dev/loop2 0 0 0 0 /root/disk.img 0 512 /dev/loop0 0 0 1 1 /var/lib/snapd/snaps/httpstat_1.snap 0 512
ループデバイス(/dev/loop2)にXFSファイルシステムを作成します。
[root@server ~]# mkfs.xfs /dev/loop2
xxdコマンドを使って、ループデバイス(/dev/loop2)に作成したシグネチャを確認してみます。XFSのシグネチャが、オフセット0から16進数で58 46 53 42と設定されていることがわかります。
[root@server ~]# xxd /dev/loop2 |less 00000000: 5846 5342 0000 1000 0000 0000 0004 0000 XFSB............ 00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000020: 2226 a100 ed22 4651 a11f fa93 6b14 2b21 "&..."FQ....k.+! 00000030: 0000 0000 0002 0006 0000 0000 0000 0080 ................ 00000040: 0000 0000 0000 0081 0000 0000 0000 0082 ................ -snip-
6.2 シグネチャを消去する方法
/dev/loop2に作成したXFSファイルシステムから シグネチャを消去してみます。
[root@server ~]# wipefs -a /dev/loop2 /dev/loop2: オフセット 0x00000000 にある 4 バイト (xfs) を消去しました: 58 46 53 42
xxdコマンドを使って、/dev/loop2のシグネチャを確認してみます。シグネチャが消去されたことがわかります。他の部分は変化していません。つまり、wipefsはシグネチャのみ消去していることがわかります。
[root@server ~]# xxd /dev/loop2 |less 00000000: 0000 0000 0000 1000 0000 0000 0004 0000 ................ 00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 00000020: 2226 a100 ed22 4651 a11f fa93 6b14 2b21 "&..."FQ....k.+! 00000030: 0000 0000 0002 0006 0000 0000 0000 0080 ................ 00000040: 0000 0000 0000 0081 0000 0000 0000 0082 ................ -snip-
/dev/loop2に作成したファイルシステムを確認します。シグネチャを消去したので、/dev/loop2にファイルシステムが存在しないことがわかります。
[root@server ~]# lsblk -fip NAME FSTYPE LABEL UUID MOUNTPOINT /dev/loop0 squashfs /var/lib/snapd/snap/httpstat/1 /dev/loop1 squashfs /var/lib/snapd/snap/core/13425 /dev/loop2 /dev/sr0 /dev/vda |-/dev/vda1 xfs 59925ca2-a617-48a4-9f18-2f7680ac70d3 /boot |-/dev/vda2 swap 35aef27e-b0f8-4704-b3fd-6a5d637c9049 [SWAP] `-/dev/vda3 xfs cfc61269-00bd-4e42-bce2-b0041bfdab9a
6.3 後始末
ループデバイス一覧を確認します。
[root@server ~]# losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC /dev/loop1 0 0 1 1 /var/lib/snapd/snaps/core_13425.snap 0 512 /dev/loop2 0 0 0 0 /root/disk.img 0 512 /dev/loop0 0 0 1 1 /var/lib/snapd/snaps/httpstat_1.snap 0 512
/dev/loop2を削除します。
[root@server ~]# losetup -d /dev/loop2
ループデバイス一覧を確認すると、/dev/loop2が削除されたことがわかります。
[root@server ~]# losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC /dev/loop1 0 0 1 1 /var/lib/snapd/snaps/core_13425.snap 0 512 /dev/loop0 0 0 1 1 /var/lib/snapd/snaps/httpstat_1.snap 0 512
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ