Lỗi Device has a filesystem khi Triển khai OSD qua Ceph Orchestrator

🧭 Tổng quan

Trong quá trình triển khai Ceph với cephadmorchestrator, bạn có thể gặp lỗi không mong muốn như:

RuntimeError: Device /dev/sde has a filesystem.

Đây là lỗi thường thấy khi tạo OSD bằng ceph orch apply osd ... và nguyên nhân là vì Ceph yêu cầu các ổ đĩa dùng làm OSD phải sạch hoàn toàn, không chứa partition, filesystem, hoặc metadata từ các ứng dụng khác (như LVM, ext4, xfs…).

Bài viết này sẽ hướng dẫn bạn xử lý sự cố trên một cách chi tiết, an toàn và có thể áp dụng trong môi trường production.

🧪 Mô tả sự cố thực tế

Trên node Ceph MON:

ceph health detail

Trả về:

shell> ceph health detail
HEALTH_WARN Failed to apply 1 service(s): osd.osd_SSD_1.9TB; failed to probe daemons or devices
[WRN] CEPHADM_APPLY_SPEC_FAIL: Failed to apply 1 service(s): osd.osd_SSD_1.9TB
    osd.osd_SSD_1.9TB: cephadm exited with an error code: 1, stderr:Non-zero exit code 1 from /usr/bin/podman run --rm --ipc=host --stop-signal=SIGTERM --net=host --entrypoint /usr/sbin/ceph-volume --privileged --group-add=disk --init -e CONTAINER_IMAGE=172.16.21.13:5000/ceph/ceph@sha256:c7baf2afe0677eb1a36205ef4a6f1958e3b64234a64a897cad50617bcb28becf -e NODE_NAME=CEPH-LAB-OSD-006 -e CEPH_USE_RANDOM_NONCE=1 -e CEPH_VOLUME_OSDSPEC_AFFINITY=osd_SSD_1.9TB -e CEPH_VOLUME_SKIP_RESTORECON=yes -e CEPH_VOLUME_DEBUG=1 -v /var/run/ceph/9efd2cce-365b-11ee-853e-a59020fddc84:/var/run/ceph:z -v /var/log/ceph/9efd2cce-365b-11ee-853e-a59020fddc84:/var/log/ceph:z -v /var/lib/ceph/9efd2cce-365b-11ee-853e-a59020fddc84/crash:/var/lib/ceph/crash:z -v /run/systemd/journal:/run/systemd/journal -v /dev:/dev -v /run/udev:/run/udev -v /sys:/sys -v /run/lvm:/run/lvm -v /run/lock/lvm:/run/lock/lvm -v /:/rootfs -v /tmp/ceph-tmp073etakk:/etc/ceph/ceph.conf:z -v /tmp/ceph-tmp5kzod89v:/var/lib/ceph/bootstrap-osd/ceph.keyring:z 172.16.21.13:5000/ceph/ceph@sha256:c7baf2afe0677eb1a36205ef4a6f1958e3b64234a64a897cad50617bcb28becf lvm batch --no-auto /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj /dev/sdk /dev/sdl /dev/sdm /dev/sdn /dev/sdo /dev/sdp /dev/sdq /dev/sdr /dev/sds /dev/sdt /dev/sdu /dev/sdv /dev/sdw --yes --no-systemd
/usr/bin/podman: stderr Traceback (most recent call last):
/usr/bin/podman: stderr   File "/usr/sbin/ceph-volume", line 11, in <module>
/usr/bin/podman: stderr     load_entry_point('ceph-volume==1.0.0', 'console_scripts', 'ceph-volume')()
/usr/bin/podman: stderr   File "/usr/lib/python3.6/site-packages/ceph_volume/main.py", line 41, in __init__
/usr/bin/podman: stderr     self.main(self.argv)
/usr/bin/podman: stderr   File "/usr/lib/python3.6/site-packages/ceph_volume/decorators.py", line 59, in newfunc
/usr/bin/podman: stderr     return f(*a, **kw)
/usr/bin/podman: stderr   File "/usr/lib/python3.6/site-packages/ceph_volume/main.py", line 153, in main
/usr/bin/podman: stderr     terminal.dispatch(self.mapper, subcommand_args)
/usr/bin/podman: stderr   File "/usr/lib/python3.6/site-packages/ceph_volume/terminal.py", line 194, in dispatch
/usr/bin/podman: stderr     instance.main()
/usr/bin/podman: stderr   File "/usr/lib/python3.6/site-packages/ceph_volume/devices/lvm/main.py", line 46, in main
/usr/bin/podman: stderr     terminal.dispatch(self.mapper, self.argv)
/usr/bin/podman: stderr   File "/usr/lib/python3.6/site-packages/ceph_volume/terminal.py", line 192, in dispatch
/usr/bin/podman: stderr     instance = mapper.get(arg)(argv[count:])
/usr/bin/podman: stderr   File "/usr/lib/python3.6/site-packages/ceph_volume/devices/lvm/batch.py", line 348, in __init__
/usr/bin/podman: stderr     self.args = parser.parse_args(argv)
/usr/bin/podman: stderr   File "/usr/lib64/python3.6/argparse.py", line 1734, in parse_args
/usr/bin/podman: stderr     args, argv = self.parse_known_args(args, namespace)
/usr/bin/podman: stderr   File "/usr/lib64/python3.6/argparse.py", line 1766, in parse_known_args
/usr/bin/podman: stderr     namespace, args = self._parse_known_args(args, namespace)
/usr/bin/podman: stderr   File "/usr/lib64/python3.6/argparse.py", line 1954, in _parse_known_args
/usr/bin/podman: stderr     positionals_end_index = consume_positionals(start_index)
/usr/bin/podman: stderr   File "/usr/lib64/python3.6/argparse.py", line 1931, in consume_positionals
/usr/bin/podman: stderr     take_action(action, args)
/usr/bin/podman: stderr   File "/usr/lib64/python3.6/argparse.py", line 1824, in take_action
/usr/bin/podman: stderr     argument_values = self._get_values(action, argument_strings)
/usr/bin/podman: stderr   File "/usr/lib64/python3.6/argparse.py", line 2279, in _get_values
/usr/bin/podman: stderr     value = [self._get_value(action, v) for v in arg_strings]
/usr/bin/podman: stderr   File "/usr/lib64/python3.6/argparse.py", line 2279, in <listcomp>
/usr/bin/podman: stderr     value = [self._get_value(action, v) for v in arg_strings]
/usr/bin/podman: stderr   File "/usr/lib64/python3.6/argparse.py", line 2294, in _get_value
/usr/bin/podman: stderr     result = type_func(arg_string)
/usr/bin/podman: stderr   File "/usr/lib/python3.6/site-packages/ceph_volume/util/arg_validators.py", line 117, in __call__
/usr/bin/podman: stderr     return self._format_device(self._is_valid_device())
/usr/bin/podman: stderr   File "/usr/lib/python3.6/site-packages/ceph_volume/util/arg_validators.py", line 128, in _is_valid_device
/usr/bin/podman: stderr     super()._is_valid_device(raise_sys_exit=False)
/usr/bin/podman: stderr   File "/usr/lib/python3.6/site-packages/ceph_volume/util/arg_validators.py", line 105, in _is_valid_device
/usr/bin/podman: stderr     super()._is_valid_device()
/usr/bin/podman: stderr   File "/usr/lib/python3.6/site-packages/ceph_volume/util/arg_validators.py", line 76, in _is_valid_device
/usr/bin/podman: stderr     raise RuntimeError("Device {} has a filesystem.".format(self.dev_path))
/usr/bin/podman: stderr RuntimeError: Device /dev/sde has a filesystem.
Traceback (most recent call last):
  File "/var/lib/ceph/9efd2cce-365b-11ee-853e-a59020fddc84/cephadm.7ab03136237675497d535fb1b85d1d0f95bbe5b95f32cd4e6f3ca71a9f97bf3c", line 9653, in <module>
    main()
  File "/var/lib/ceph/9efd2cce-365b-11ee-853e-a59020fddc84/cephadm.7ab03136237675497d535fb1b85d1d0f95bbe5b95f32cd4e6f3ca71a9f97bf3c", line 9641, in main
    r = ctx.func(ctx)
  File "/var/lib/ceph/9efd2cce-365b-11ee-853e-a59020fddc84/cephadm.7ab03136237675497d535fb1b85d1d0f95bbe5b95f32cd4e6f3ca71a9f97bf3c", line 2153, in _infer_config
    return func(ctx)
  File "/var/lib/ceph/9efd2cce-365b-11ee-853e-a59020fddc84/cephadm.7ab03136237675497d535fb1b85d1d0f95bbe5b95f32cd4e6f3ca71a9f97bf3c", line 2069, in _infer_fsid
    return func(ctx)
  File "/var/lib/ceph/9efd2cce-365b-11ee-853e-a59020fddc84/cephadm.7ab03136237675497d535fb1b85d1d0f95bbe5b95f32cd4e6f3ca71a9f97bf3c", line 2181, in _infer_image
    return func(ctx)
  File "/var/lib/ceph/9efd2cce-365b-11ee-853e-a59020fddc84/cephadm.7ab03136237675497d535fb1b85d1d0f95bbe5b95f32cd4e6f3ca71a9f97bf3c", line 2056, in _validate_fsid
    return func(ctx)
  File "/var/lib/ceph/9efd2cce-365b-11ee-853e-a59020fddc84/cephadm.7ab03136237675497d535fb1b85d1d0f95bbe5b95f32cd4e6f3ca71a9f97bf3c", line 6254, in command_ceph_volume
    out, err, code = call_throws(ctx, c.run_cmd(), verbosity=CallVerbosity.QUIET_UNLESS_ERROR)
  File "/var/lib/ceph/9efd2cce-365b-11ee-853e-a59020fddc84/cephadm.7ab03136237675497d535fb1b85d1d0f95bbe5b95f32cd4e6f3ca71a9f97bf3c", line 1853, in call_throws
    raise RuntimeError('Failed command: %s' % ' '.join(command))
RuntimeError: Failed command: /usr/bin/podman run --rm --ipc=host --stop-signal=SIGTERM --net=host --entrypoint /usr/sbin/ceph-volume --privileged --group-add=disk --init -e CONTAINER_IMAGE=172.16.21.13:5000/ceph/ceph@sha256:c7baf2afe0677eb1a36205ef4a6f1958e3b64234a64a897cad50617bcb28becf -e NODE_NAME=CEPH-LAB-OSD-006 -e CEPH_USE_RANDOM_NONCE=1 -e CEPH_VOLUME_OSDSPEC_AFFINITY=osd_SSD_1.9TB -e CEPH_VOLUME_SKIP_RESTORECON=yes -e CEPH_VOLUME_DEBUG=1 -v /var/run/ceph/9efd2cce-365b-11ee-853e-a59020fddc84:/var/run/ceph:z -v /var/log/ceph/9efd2cce-365b-11ee-853e-a59020fddc84:/var/log/ceph:z -v /var/lib/ceph/9efd2cce-365b-11ee-853e-a59020fddc84/crash:/var/lib/ceph/crash:z -v /run/systemd/journal:/run/systemd/journal -v /dev:/dev -v /run/udev:/run/udev -v /sys:/sys -v /run/lvm:/run/lvm -v /run/lock/lvm:/run/lock/lvm -v /:/rootfs -v /tmp/ceph-tmp073etakk:/etc/ceph/ceph.conf:z -v /tmp/ceph-tmp5kzod89v:/var/lib/ceph/bootstrap-osd/ceph.keyring:z 172.16.21.13:5000/ceph/ceph@sha256:c7baf2afe0677eb1a36205ef4a6f1958e3b64234a64a897cad50617bcb28becf lvm batch --no-auto /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj /dev/sdk /dev/sdl /dev/sdm /dev/sdn /dev/sdo /dev/sdp /dev/sdq /dev/sdr /dev/sds /dev/sdt /dev/sdu /dev/sdv /dev/sdw --yes --no-systemd

Chúng ta để ý dòng này.

HEALTH_WARN Failed to apply 1 service(s): osd.osd_SSD_1.9TB; failed to probe daemons or devices

Chi tiết lỗi:

RuntimeError: Device /dev/sde has a filesystem.

Lỗi này xảy ra trong quá trình orchestrator gọi container ceph-volume để tạo OSD batch.

📌 Nguyên nhân

Thành phầnVai tròLỗi gây ra
ceph-volumeDùng để format disk và tạo OSDPhát hiện disk còn FS
/dev/sdeDisk được chọn làm OSDĐã từng gắn filesystem, chưa được wipe sạch
orchestratorĐiều phối container và OSDKhông thể xử lý disk không sạch

⚙️ Hướng xử lý chi tiết

🔍 Bước 1: Xác minh ổ đĩa có filesystem

lsblk -f /dev/sde

Nếu cột FSTYPE hiện xfs, ext4, ntfs… ⇒ thiết bị chưa sạch.

🧹 Bước 2: Xóa sạch ổ đĩa

⚠️ CẢNH BÁO: Đảm bảo /dev/sde không chứa dữ liệu cần giữ!

Chạy:

wipefs -a /dev/sde
sgdisk --zap-all /dev/sde
partprobe /dev/sde

Giải thích:

  • wipefs -a: Xóa mọi filesystem signature.
  • sgdisk --zap-all: Xóa GPT/MBR partition table.
  • partprobe: Reload bảng phân vùng.

Nên lặp lại bước này cho các disk khác như /dev/sdf, /dev/sdg nếu cần.

🔁 Bước 3: Thực hiện lại thao tác tạo OSD

Nếu bạn dùng file spec:

ceph orch apply osd -i osd_SSD_1.9TB.yaml

Hoặc:

ceph orch apply osd osd_SSD_1.9TB

✅ Bước 4: Kiểm tra lại trạng thái sau khi sửa

ceph health detail
ceph orch ps | grep osd

Xác nhận không còn lỗi failed to probe daemons or devices.

📊 Sơ đồ luồng lỗi & xử lý (ASCII)

┌───────────────┐
│  Orchestrator │
└──────┬────────┘
       │ gọi podman/ceph-volume
       ▼
┌───────────────┐
│  ceph-volume  │──┐
└────┬──────────┘  │
     ▼             ▼
┌──────────────┐  ┌───────────────────────────┐
│ /dev/sde có  │  │ Lỗi: "has a filesystem"   │
│ filesystem   │  └───────────────────────────┘
└──────────────┘
        │
        ▼ wipefs/sgdisk
┌──────────────┐
│ Disk sạch OK │──> apply osd thành công
└──────────────┘

✅ Ưu điểm của quy trình này

Ưu điểmMô tả
Chủ động xử lý lỗiKhông cần reset toàn bộ node
Không cần sửa specVẫn giữ nguyên file spec nếu đã đúng
Có thể automationCó thể viết script xử lý nhiều ổ đĩa

❌ Nhược điểm cần lưu ý

Nhược điểmGhi chú
Có thể xóa nhầm dữ liệuPhải chắc chắn disk không chứa OSD cũ
Cần truy cập shell trên node OSDKhông thực hiện được nếu SSH bị chặn

🧠 Lời khuyên khi triển khai OSD với Ceph Orchestrator

  • Kiểm tra trước khi apply: Dùng lsblk, blkid, wipefs -n để kiểm tra tình trạng disk.
  • Chuẩn hóa disk sạch từ đầu: Với disk mới hoặc tái sử dụng, luôn wipe sạch trước khi chạy apply.
  • Sử dụng automation: Nếu có nhiều node và disk, hãy viết script auto-clean.

Ví dụ script cleanup toàn bộ disk:

for dev in /dev/sd{e..w}; do
  echo "Wiping $dev..."
  wipefs -a $dev
  sgdisk --zap-all $dev
  partprobe $dev
done

✅ Tổng kết

Việc cần làmLệnh
Kiểm tra filesystemlsblk -f /dev/sdX
Wipe disk sạchwipefs -a, sgdisk --zap-all, partprobe
Deploy lại OSDceph orch apply osd ...
Kiểm tra lỗi Cephceph health detail, ceph orch ps

📌 Kết luận

Việc chuẩn bị thiết bị lưu trữ sạch sẽ là bước quan trọng trước khi triển khai OSD trong Ceph. Ceph Orchestrator rất nghiêm ngặt trong việc đảm bảo an toàn dữ liệu, do đó sẽ từ chối bất kỳ thiết bị nào có dấu hiệu từng được sử dụng.

Đầu tư kỹ ở bước chuẩn bị đĩa sẽ giúp bạn tránh được nhiều rắc rối khi vận hành cluster Ceph về sau.

Bài viết gần đây

spot_img

Related Stories

Leave A Reply

Please enter your comment!
Please enter your name here

Đăng ký nhận thông tin bài viết qua email