概要
OpenMediaVault(OMV)をラズパイ上で起動して運用しています。別のLinux機から持ってきたext4のストレージをOMVでマウントしようとしたところ、エラーのためストレージ管理ができませんでした。どうやらquotacheckコマンドの失敗が原因のようでした。いろいろ試した結果、OSのアップデートとアップグレードで解決しましたが、理由についてははっきりさせることはできませんでした。ここに試行錯誤したメモとして残しておきます。
環境
- Raspberry Pi 5 Model B Rev 1.0
- Raspberry Pi OS Lite (64-bit)(Debian GNU/Linux 12.2.0 (bookworm))
- デスクトップ内蔵用の6TB HDDをSATA -> USB変換器に接続し、ラズパイに接続
- OpenMediaVault 7.4.8-1
症状
再現手順
ストレージを接続し、OMVにログイン後、下記のようにメニューから対象のストレージをマウントします。
- ストレージ > ファイルシステム
- 「マウント」ボタン押下で対象ストレージをマウント
- 「HTTP 500 ERROR」がトースト通知される
- 詳細を右上通知アイコン(ベルマーク)押下で確認
- エラー内容をクリップボードにコピー
下記にエラー内容を示します。
...(中略)
----------
ID: quota_off_no_quotas_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Function: cmd.run
Name: quotaoff --group --user /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx || true
Result: True
Comment: Command "quotaoff --group --user /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx || true" run
Started: 09:12:23.798013
Duration: 89.49 ms
Changes:
----------
pid:
3637467
retcode:
0
stderr:
quotaoff: quotactl on /dev/sdd1 [/srv/dev-disk-by-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]: File exists
quotaoff: quotactl on /dev/sdd1 [/srv/dev-disk-by-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]: File exists
stdout:
----------
ID: quota_check_no_quotas_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Function: cmd.run
Name: quotacheck --user --group --create-files --no-remount --verbose /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Result: False
Comment: Command "quotacheck --user --group --create-files --no-remount --verbose /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" run
Started: 09:12:23.887682
Duration: 23.039 ms
Changes:
----------
pid:
3637469
retcode:
1
stderr:
quotacheck: Cannot find filesystem to check or filesystem not mounted with quota option.
stdout:
----------
ID: disable_quota_service
Function: service.disabled
Name: quota
Result: True
Comment: Service quota is already disabled, and is in the desired state
Started: 09:12:24.782316
Duration: 24.895 ms
Changes:
Summary for server
------------
Succeeded: 2 (changed=2)
Failed: 1
------------
Total states run: 3
Total run time: 137.424 ms
[ERROR ] Command 'quotacheck' failed with return code: 1
[ERROR ] stderr: quotacheck: Cannot find filesystem to check or filesystem not mounted with quota option.
[ERROR ] retcode: 1
[ERROR ] {'pid': 3637469, 'retcode': 1, 'stdout': '', 'stderr': 'quotacheck: Cannot find filesystem to check or filesystem not mounted with quota option.'} in /usr/share/php/openmediavault/system/process.inc:247
Stack trace:
#0 /usr/share/php/openmediavault/engine/module/serviceabstract.inc(62): OMV\System\Process->execute()
#1 /usr/share/openmediavault/engined/rpc/config.inc(186): OMV\Engine\Module\ServiceAbstract->deploy()
#2 [internal function]: Engined\Rpc\Config->applyChanges()
#3 /usr/share/php/openmediavault/rpc/serviceabstract.inc(122): call_user_func_array()
#4 /usr/share/php/openmediavault/rpc/serviceabstract.inc(149): OMV\Rpc\ServiceAbstract->callMethod()
#5 /usr/share/php/openmediavault/rpc/serviceabstract.inc(622): OMV\Rpc\ServiceAbstract->OMV\Rpc\{closure}()
#6 /usr/share/php/openmediavault/rpc/serviceabstract.inc(146): OMV\Rpc\ServiceAbstract->execBgProc()
#7 /usr/share/openmediavault/engined/rpc/config.inc(207): OMV\Rpc\ServiceAbstract->callMethodBg()
#8 [internal function]: Engined\Rpc\Config->applyChangesBg()
#9 /usr/share/php/openmediavault/rpc/serviceabstract.inc(122): call_user_func_array()
#10 /usr/share/php/openmediavault/rpc/rpc.inc(86): OMV\Rpc\ServiceAbstract->callMethod()
#11 /usr/sbin/omv-engined(544): OMV\Rpc\Rpc::call()
#12 {main}
補足事項
- この時点で、ストレージのマウント自体はされていました。
- OMVを起動しているラズパイ内にて、
/srv/dev-disk-by-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/
配下のファイルへアクセスできることを確認
- OMVを起動しているラズパイ内にて、
- ストレージはほかのLinuxマシンでフォーマットしたext4
quotaoff, quotaon, quotacheck
エラーログを眺めていると、quotacheckコマンドが失敗していることが原因のようでした。とくにquota設定は行っていないのですが、OMVが自動的に有効にします。OMVがやろうとしていることを手元でも実行してみます。
# 対象のディレクトリのマウント設定があることを確認。どのようなオプションで起動しているか確認する。
cat /etc/fstab
下記の出力で、対象のストレージのマウント設定を確認できました。
proc /proc proc defaults 0 0
PARTUUID=0000000b-01 /boot/firmware vfat defaults 0 2
PARTUUID=0000000b-02 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
# >>> [openmediavault]
/dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /srv/dev-disk-by-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ext4 defaults,nofail,user_xattr,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0,acl 0 2
# <<< [openmediavault]
以下のようにコマンドを入力してみて、同様のエラーが出力されるか試しました。
# いったんアンマウント
sudo umount /srv/dev-disk-by-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# マウントしてみる
sudo mount -o 'defaults,nofail,user_xattr,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0,ac' /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /srv/dev-disk-by-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# quotaをオンにしてみる
sudo quotaon -v /srv/dev-disk-by-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# /dev/sdb1 [/srv/dev-disk-by-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]: group quotas turned on
# /dev/sdb1 [/srv/dev-disk-by-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]: user quotas turned on
# 問題のコマンド
quotacheck -v /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# quotacheck: Cannot find filesystem to check or filesystem not mounted with quota option.
sudo quotaoff -v /dev/disk/by-uuid/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# /dev/sdb1 [/srv/dev-disk-by-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]: group quotas turned off
# /dev/sdb1 [/srv/dev-disk-by-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx]: user quotas turned off
quotacheckで失敗します。OMVのエラーログとほぼ同様の状況なので、OMV自体に問題はなさそうです。
マウントできるストレージとできないストレージ
マウントできるストレージにて同様にquotaon
コマンドを実行してみると、下記のような非推奨機能に関する警告が出ていることに気づきました。
quotacheck: Your kernel probably supports ext4 quota feature but you are using external quota files. Please switch your filesystem to use ext4 quota feature as external quota files on ext4 are deprecated.
確認してみると、ストレージの直下に、aquota.user
、aquota.group
ファイルがありました(これがexternal quota filesか)。一方で、マウントできなかったストレージには存在しませんでした。本環境ではext4 quota
なストレージはquotacheckで失敗してしまう状況と思われます。この警告を解消する下記コマンドを試してみましたが、効果はありませんでした。
sudo umount /srv/dev-disk-by-uuid-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
sudo tune2fs -O quota /dev/sdd1
- quotaの警告解決についての参考
解決方法
最終的にOSのアップデート&アップグレードを行ったところ、解決しました。
OSのアップデート&アップグレード
sudo apt -y update
sudo apt -y full-upgrade
sudo reboot
以下にバージョン情報を示します。
Linux version 6.6.28+rpt-rpi-2712 (debian-kernel@lists.debian.org) (gcc-12 (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Debian 1:6.6.28-1+rpt1 (2024-04-22)
↓
Linux version 6.6.51+rpt-rpi-2712 (serge@raspberrypi.com) (gcc-12 (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Debian 1:6.6.51-1+rpt3 (2024-10-08)
Firmwareのアップデート
Firmwareのアップデートも行います。
sudo raspi-config
CLIツールRaspberry Pi Software Configuration Toolが起動します。
- Advanced Options > Bootloader Version > Latest Use the latest bootloader image
以下のメッセージが表示されたら「yes」を選択します。最初意味がうまく理解できず「no」を選択してしまいました(「Latest version bootloader」をdefaultに設定するか銅貨を聞かれていると思われる)。
Latest version bootloader selected - will be loaded at next reboot.
Reset bootloader to default configuration?
再起動を促されるので再起動します。バージョンアップされたか確認します。
sudo rpi-eeprom-update -a
以下に出力例を示します。
BOOTLOADER: up to date
CURRENT: Tue Nov 12 16:10:44 UTC 2024 (1731427844)
LATEST: Tue Nov 12 16:10:44 UTC 2024 (1731427844)
RELEASE: latest (/lib/firmware/raspberrypi/bootloader-2712/latest)
Use raspi-config to change the release.
「CURRENT」と「LATEST」が同じ値であればOK。
- ラズパイアップデートの参考
以上です。