はじめに
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) という概念を用い、物理デバイスと論理デバイスとの対応関係を定義する。どのようにマッピングするかの情報をカーネルに設定することで、様々なバリエーションの仮想デバイスを作成できる。
さいごに
かんたんでしたね