hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

wipefsコマンドの使い方



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技術ブログ