0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【2025年02月版】消せないように見えるブロックデバイスを触るの時メモ【lsblk, dmsetup, wipefs, blkdiscard】

Last updated at Posted at 2025-02-01

はじめに

cephのOSDで使っていたNVMeを再利用するために別のマシンかに装着したら、Resouce Busyで使えないんですけど。。。といった時のメモ

結論

dmsetup remove で削除する。

経緯

別のマシンで、cephのOSDとして使っていたNVMeを再利用するために、別のマシンに入れてみました。
ext4でフォーマットしようと、ブロクデバイスを確認するとこんな感じでした。

# lsblk
 :
 :
nvme0n1                                                                                                                              
├─ceph--8b4f670a--c112--4dcd--88d6--aecd12ae4dd6-osd--block--69119991--567f--453f--b8ae--5283eb1ef0f5
 :
 :

いつもはパーティションの情報などを吹き飛ばしてフォーマットするので dd コマンドを実行しました。

# dd if=/dev/zero of=/dev/nvme0n1 bs=1M count=10 status=progress

さて、どうなったか確認。

# lsblk
 :
 :
nvme0n1                                                                                                                              
├─ceph--8b4f670a--c112--4dcd--88d6--aecd12ae4dd6-osd--block--69119991--567f--453f--b8ae--5283eb1ef0f5
 :
 :

あるぅぇ?

後ろから10M消してもよかったのかもしれないです。

dd if=/dev/zero of=/dev/nvme0n1 bs=512 seek=$(( $(blockdev --getsz /dev/nvme0n1) - 10240 )) count=10240
# umount /dev/nvme0n1
Device or resource busy
# wipefs --all /dev/nvme0n1
# dd if=/dev/zero of=/dev/nvme0n1 bs=1M count=10 status=progress
# blkdiscard /dev/nvme0n1
Device or resource busy

wipefs、blkdiscard、dd でも消せない。。。

# lsblk
 :
 :
nvme0n1                                                                                                                              
├─ceph--8b4f670a--c112--4dcd--88d6--aecd12ae4dd6-osd--block--69119991--567f--453f--b8ae--5283eb1ef0f5
 :
 :

なにかつかんでいるのかな?

# lsof | grep /dev/nvme0n1
# fuser -v /dev/nvme0n1

ないなぁ。。。

なので、デバイスマップをいじることに

# dmsetup ls
ceph--8b4f670a--c112--4dcd--88d6--aecd12ae4dd6-osd--block--69119991--567f--453f--b8ae--5283eb1ef0f5     (252:2)
pve-data        (252:5)
pve-data_tdata  (252:4)
pve-data_tmeta  (252:3)
pve-root        (252:1)
pve-swap        (252:0)

dmsetup ls の結果から、nvme0n1 に関連するデバイスマッパー(LVM)として存在しており、これが busy の原因と予想。

# dmsetup remove ceph--8b4f670a--c112--4dcd--88d6--aecd12ae4dd6-osd--block--69119991--567f--453f--b8ae--5283eb1ef0f5
# dmsetup ls
pve-data        (252:5)
pve-data_tdata  (252:4)
pve-data_tmeta  (252:3)
pve-root        (252:1)
pve-swap        (252:0)

消えたので、いつもどおりに

# dd if=/dev/zero of=/dev/nvme0n1 bs=1M count=10 status=progress
# makefs.ext4 /dev/nvmee0n1

その他

dmsetup コマンドとは

dmsetup は、Linux カーネルの機能である Device Mapper を操作・管理するためのコマンドラインツール。
Device Mapper は、物理ストレージデバイスを抽象化して柔軟なブロックデバイスを作成・管理するためのレイヤ。
LVM (Logical Volume Manager) や暗号化ディスク (dm-crypt) などの基盤として広く利用されている。

Device Mapper の管理・操作

dmsetup は、Device Mapper が扱う “マッピングテーブル” の確認や編集、新規デバイスの作成・削除などを行うためのコマンド。
必要に応じてカーネルの Device Mapper に情報を登録・更新し、仮想デバイスを制御する。

よく使うサブコマンド・オプション

dmsetup ls

登録されているデバイス (マッパーデバイス) の一覧を表示する。LVM で作成された論理ボリュームなどが表示される。

dmsetup info

指定したデバイス (例: /dev/mapper/...) の詳細情報を表示する。

dmsetup table

指定したデバイスのマッピングテーブルを表示する。どの物理デバイスとどのように紐づいているのか確認できる。

dmsetup create / remove

新規の Device Mapper デバイスの作成や、不要になったデバイスの削除を行う。create の場合はマッピングテーブルを引数などで与える必要がある。

dmsetup reload

既存のデバイスに対してマッピングテーブルを再読み込みさせ、再設定を反映させることができる。

Device Mapper とは

抽象化レイヤ

Device Mapper は、物理デバイス (例: /dev/sda, /dev/nvme0n1) を論理的にまとめたり分割したりし、仮想的なブロックデバイスを作成するための抽象化レイヤ。

様々な機能への応用

LVM (Volume Group や Logical Volume の作成・管理)、RAID、スナップショット、暗号化 (dm-crypt、LUKS)、Thin Provisioning (薄合せ) など、多くのストレージ機能が Device Mapper の上に構築されている。

テーブルによる管理

Device Mapper はテーブル (mapping table) という概念を用い、物理デバイスと論理デバイスとの対応関係を定義する。どのようにマッピングするかの情報をカーネルに設定することで、様々なバリエーションの仮想デバイスを作成できる。

さいごに

かんたんでしたね

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?