問題描述:
k8s環境中需要重新創建lvm:/dev/mapper/test-vg-test-storage,該lvm掛載在/data/prometheus下面,在刪除出現"Logical volume contains a filesystem in use"的錯誤,表明該lvm被某個進程占用,但直接使用該lvm的容器已經被清理,使用lvchange -an /dev/mapper/test-vg-test-storage去激活該lvm時也會出現上述錯誤。
解決方法:
使用如下腳本找出所有與該lvm相關的進程
# for i in /proc/[0-9]* ; do echo $i >> /tmp/mountinfo ; grep -q "/dev/mapper/test-vg-test-storage" $i/mountinfo ; echo $? >> /tmp/mountinfo ; done
結果如下:
# grep -B 1 '^0$' /tmp/mountinfo /proc/922 0
根因分析:
經排查,該進程對應Prometheus node-exportor的容器,出現刪除lvm失敗的原因是該lvm掛載在/data/prometheus下面,而node-exportor的容器中又掛載了根目錄,/data/prometheus屬於根目錄,因此會出現lvm被使用的情況。刪除node-export容器即可正常刪除lvm
volumes: - name: proc hostPath: path: /proc - name: sys hostPath: path: /sys - name: rootfs hostPath: path: /
# lvchange -an /dev/mapper/test-vg-test-storage
# lvremove /dev/mapper/test-vg-test-storage
總結:
- 掛載文件或目錄時以最小權限掛載
- 上述腳本適用於定位所有因為掛載而導致的失敗
參考:
