ext4文件系统使用

1. 目前嵌入式设备,如andorid,大部分使用了emmc存储介质,文件系统一般都设计为ext4系统,更好的使用日志型的特点。

 2. 使用时,如果有用户数据分区,一般都要做挂载修复等动作。

如果是系统存储分区,可以直接使用只读文件系统进行挂载使用。如果需要可读写,则需要设计为可读写的属性,如果使用时,不进行挂载修复,则可能严重时会导致数据错误,或分区损坏等。

3. 修复一般分为,判断分区类型,卸载,修复,挂载。代码可以参考:


repair_dev_node()
{
    dev_node=$1
    [ ! -b ${dev_node} ] && return 1
    [ ! -e "/extconf/tools/fsck.ext4" ] && return 2
    echo "........ repair ${dev_node} start! ........"
    ret=1    
    times=1
    tune2fs -c 1 ${dev_node}    
    /extconf/tools/fsck.ext4 -y ${dev_node}    
    ret=$?    
    while [ ${ret} -ne 0 ]
    do
        echo "======== repair ${dev_node} ${times} times ========"
        let times++
        sleep 1
        /extconf/tools/fsck.ext4 -y ${dev_node}
        ret=$?
        [ ${ret} -eq 0 ] && return 0
        [ ${times} -ge 10 ] && return 3
    done
    return 0
}

check_emmc_mount()
{
    mount_ret=0
    /bin/mountpoint -q /opt/emmc/
    #if [ $? -eq 0 ] && [ -b "$(cat /proc/mounts | grep /opt/emmc | awk '{print $1}')" ]; then
    if [ $? -eq 0 ]; then
        let mount_ret++
    fi
    /bin/mountpoint -q /opt/line/
    #if [ $? -eq 0 ] && [ -b "$(cat /proc/mounts | grep /opt/line | awk '{print $1}')" ]; then
    if [ $? -eq 0 ]; then
        let mount_ret++
    fi
    return ${mount_ret}
}
EMMCCARD_CORRESPOND_USB_DEV="../devices/soc/10040000.ehci/usb1/1-2/1-2:1.0"
EMMC_DEV_NODE=""

USB_STORAGE_BUS=$(ls /sys/block/sd* -l | awk '{print $NF}')
EMMCCARD_CHAR_CNT=$(echo ${EMMCCARD_CORRESPOND_USB_DEV} | tr -d '\n' | wc -c)

for bus in ${USB_STORAGE_BUS}
do
    bus_c=$(echo ${bus} | tr -d '\n' | head -c ${EMMCCARD_CHAR_CNT})
    #echo ${bus}
    #echo ${bus_c}
    if [ "${EMMCCARD_CORRESPOND_USB_DEV}" = "${bus_c}" ]; then
        EMMC_DEV_NODE=$(echo ${bus} | tr -d '\n' | awk -F/ '{print $NF}')
        break
    fi    
done

[ -z "${EMMC_DEV_NODE}" ] && return 1

check_emmc_mount
ret=$?
[ ${ret} -eq 2 ] && return 2


if [ -n "${EMMC_DEV_NODE}" ]; then
    #echo ${EMMC_DEV_NODE}
    
    emmc_dir_node=/dev/${EMMC_DEV_NODE}1
    line_dir_node=/dev/${EMMC_DEV_NODE}2
        
    if [ -b ${emmc_dir_node} ] && [ -b ${line_dir_node} ]; then
        emmc_dir_node_fs=$(/sbin/blkid ${emmc_dir_node} | awk -F= '{print $NF}' | tr -d '"')
        line_dir_node_fs=$(/sbin/blkid ${emmc_dir_node} | awk -F= '{print $NF}' | tr -d '"')
        if [ "${emmc_dir_node_fs}" = "ext4" ]; then
            echo ${emmc_dir_node} >> /tmp/.mount_emmc.log
            repair_dev_node ${emmc_dir_node}
            [ $? -eq 0 ] && echo "++++++++ repair ${emmc_dir_node} successfully! ++++++++" || echo "-------- repair ${emmc_dir_node} failed! --------"
            sync
            #rm -rf /opt/emmc/ && mkdir -p /opt/emmc/
            /bin/mount -t ext4 ${emmc_dir_node} /opt/emmc/ >> /tmp/.mount_emmc.log
            [ $? -eq 0 ] && echo ${emmc_dir_node} | tr  -d  '\n' > /tmp/.emmcinserted
        fi    
        if [ "${line_dir_node_fs}" = "ext4" ]; then
            echo ${line_dir_node} >> /tmp/.mount_line.log
            repair_dev_node ${line_dir_node}
            [ $? -eq 0 ] && echo "++++++++ repair ${line_dir_node} successfully! ++++++++" || echo "-------- repair ${line_dir_node} failed! --------"
            sync
            #rm -rf /opt/line/ && mkdir -p /opt/line/
            /bin/mount -t ext4 ${line_dir_node} /opt/line/ >> /tmp/.mount_line.log
            [ $? -eq 0 ] && echo ${line_dir_node} | tr  -d  '\n' > /tmp/.lineinserted
        fi    
    else
        return 4
    fi
fi

 其中fsck.ext4 参数,可以选择-y,意思是交互的选择都同意,这样严重的错误提醒,都同意进行修复,防止停留在交互选项,系统启动不起来的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硅谷魔术师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值