您可以使用
我正在使用脚本将OCI中的块卷附加到新实例或现有实例(如下(。但是,如果卷已经分配了文件系统类型,我将丢失所有数据!
有没有一种方法只能在命令sudo mkfs -t ext4 /dev/oracleoci/oraclevdb
尚未格式化的情况下运行?
如果连接的卷尚未格式化,是否有办法运行下面的第1行,仅?
sudo mkfs -t ext4 /dev/oracleoci/oraclevdb
sudo mkdir /data
sudo mount /dev/oracleoci/oraclevdd /data
df -h
问题是,每次使用现有卷创建新实例时,我都会丢失所有数据。然而,我想保留新实例附加新卷时的行为。
所以。。。
if condition x
sudo mkfs -t ext4 /dev/oracleoci/oraclevdb
else
do nothing
我正在运行Oracle Linux 8。
只需检查是否可以安装即可。
if ! sudo mount /dev/oracleoci/oraclevdd /data; then
if ! sudo mkfs -t ext4 /dev/oracleoci/oraclevdb; then
echo "och nooo, formatting fialed"
fi
if ! sudo mount /dev/oracleoci/oraclevdd /data; then
echo "Och nooooo, can't mount after formatting, that's odd"
fi
fi
您可以在运行lsblk
时获得此信息,如下所示:
lsblk -o NAME,FSTYPE
并使用一些脚本运行测试:
export DEVICE="/dev/oracleoci/oraclevdb"
export FSTYPE="ext4"
if ! lsblk -o NAME,FSTYPE | grep $DEVICE | grep $FSTYPE; then
sudo mkfs -t $FSTYPE $DEVICE
fi
您可以使用file
检查任何的内容:
带选项:
-b, --brief Do not prepend filenames to output lines (brief mode). -L, --dereference option causes symlinks to be followed, as the like-named option in ls -s, --special-files Specifying the -s option causes file to also read argument files which are block or character special files.
创建脚本conditionalMkExt4
:
#!/bin/bash
if [[ ! -b $1 ]] ;then
echo "Not a block device: '$1'"
exit 1
fi
sudo /bin/bash <<eof
read -r partTyp < <(file -Lsb "$1")
case $partTyp in
data )
mkfs -t ext4 "$1"
;;
* )
echo "Device '$1' is of type: '$partTyp'"
exit 1
;;
esac
if [[ $2 ]] ;then
[[ -e $2 ]] || mkdir -p "$2"
mount "$1" "$2"
fi
eof
然后
conditionalMkExt4 /dev/oracleoci/oraclevdb /data
如果您希望能够鞭打任何非ext4分区:
用取代case ... esac
case $partTyp in
*ext4* )
echo "Device '$1' already formated as ext4"
exit 1 # Comment this if you want to mount if already formated
;;
* )
mkfs -t ext4 "$1"
;;
esac