如何使用mkfs-t ext4在现有卷上保留数据,但在新卷上删除



我正在使用脚本将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

相关内容

  • 没有找到相关文章

最新更新