1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun# Uncomment below to see more logs 4*4882a593Smuzhiyun# set -x 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunBUSYBOX_MOUNT_OPTS="loop (a|)sync (no|)atime (no|)diratime (no|)relatime (no|)dev (no|)exec (no|)suid (r|)shared (r|)slave (r|)private (un|)bindable (r|)bind move remount ro" 7*4882a593SmuzhiyunNTFS_3G_MOUNT_OPTS="ro uid=[0-9]* gid=[0-9]* umask=[0-9]* fmask=[0-9]* dmask=[0-9]*" 8*4882a593Smuzhiyun 9*4882a593Smuzhiyuncheck_tool() 10*4882a593Smuzhiyun{ 11*4882a593Smuzhiyun TOOL=$(echo $1 | grep -o "^[^ ]*") 12*4882a593Smuzhiyun BR2_CONFIG=$2 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun type $TOOL >/dev/null && return 0 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun if grep -wq "ID=buildroot" /etc/os-release 2>/dev/null; then 17*4882a593Smuzhiyun [ -n "$BR2_CONFIG" ] && \ 18*4882a593Smuzhiyun echo "You may need to enable $BR2_CONFIG" 19*4882a593Smuzhiyun else 20*4882a593Smuzhiyun echo "Missing tool: $TOOL" 21*4882a593Smuzhiyun fi 22*4882a593Smuzhiyun return 1 23*4882a593Smuzhiyun} 24*4882a593Smuzhiyun 25*4882a593Smuzhiyundevice_from_attr() 26*4882a593Smuzhiyun{ 27*4882a593Smuzhiyun # It's a block device 28*4882a593Smuzhiyun if [ -b "$1" ]; then 29*4882a593Smuzhiyun echo $1 30*4882a593Smuzhiyun return 31*4882a593Smuzhiyun fi 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun # Parse from blkid 34*4882a593Smuzhiyun blkid 2>/dev/null | grep -w "$1" | head -n 1 | \ 35*4882a593Smuzhiyun grep -o "^[^:]*" && return 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun # Check mtdblock name 38*4882a593Smuzhiyun for d in $(ls /dev/ | grep mtdblock); do 39*4882a593Smuzhiyun if grep -q "^$1$" /sys/block/$d/device/name; then 40*4882a593Smuzhiyun echo $d 41*4882a593Smuzhiyun return 42*4882a593Smuzhiyun fi 43*4882a593Smuzhiyun done 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun # Fallback to /dev/block/by-name 46*4882a593Smuzhiyun if [ -b /dev/block/by-name/$1 ]; then 47*4882a593Smuzhiyun echo /dev/block/by-name/$1 48*4882a593Smuzhiyun return 49*4882a593Smuzhiyun fi 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun echo $1 52*4882a593Smuzhiyun} 53*4882a593Smuzhiyun 54*4882a593Smuzhiyunprepare_ubi() 55*4882a593Smuzhiyun{ 56*4882a593Smuzhiyun # Only support ubi for mtd device 57*4882a593Smuzhiyun if echo $DEV | grep -vq /dev/mtd; then 58*4882a593Smuzhiyun echo "$DEV is not a mtd device!" 59*4882a593Smuzhiyun return 1 60*4882a593Smuzhiyun fi 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun [ "$PART_NO" ] || { echo "No valid part number!" && return 1; } 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun if [ "$FSGROUP" = ubifs ]; then 65*4882a593Smuzhiyun DEV=/dev/ubi${PART_NO}_0 66*4882a593Smuzhiyun else 67*4882a593Smuzhiyun DEV=/dev/ubiblock${PART_NO}_0 68*4882a593Smuzhiyun fi 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun MTDDEV=/dev/mtd${PART_NO} 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun echo "Preparing $DEV from $MTDDEV" 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun echo "Remove ubi block device" 75*4882a593Smuzhiyun if echo $DEV | grep -q ubiblock; then 76*4882a593Smuzhiyun check_tool ubiblock BR2_PACKAGE_MTD_UBIBLOCK || return 1 77*4882a593Smuzhiyun ubiblock -r /dev/ubi${PART_NO}_0 &>/dev/null 78*4882a593Smuzhiyun fi 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun echo "Detach ubi device" 81*4882a593Smuzhiyun check_tool ubidetach BR2_PACKAGE_MTD_UBIDETACH || return 1 82*4882a593Smuzhiyun ubidetach -p $MTDDEV &>/dev/null 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun echo "Attach ubi device" 85*4882a593Smuzhiyun check_tool ubiattach BR2_PACKAGE_MTD_UBIATTACH || return 1 86*4882a593Smuzhiyun ubiattach /dev/ubi_ctrl -m $PART_NO -d $PART_NO || return 1 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun echo "Check for valid volume" 89*4882a593Smuzhiyun if [ ! -e /dev/ubi${PART_NO}_0 ]; then 90*4882a593Smuzhiyun echo "No valid ubi volume" 91*4882a593Smuzhiyun return 1 92*4882a593Smuzhiyun fi 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun echo "Create ubi block device" 95*4882a593Smuzhiyun if echo $DEV | grep -q ubiblock; then 96*4882a593Smuzhiyun check_tool ubiblock BR2_PACKAGE_MTD_UBIBLOCK || return 1 97*4882a593Smuzhiyun ubiblock -c /dev/ubi${PART_NO}_0 || return 1 98*4882a593Smuzhiyun fi 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun return 0 101*4882a593Smuzhiyun} 102*4882a593Smuzhiyun 103*4882a593Smuzhiyunformat_ubifs() 104*4882a593Smuzhiyun{ 105*4882a593Smuzhiyun echo "Formatting $MTDDEV for $DEV" 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun echo "Remove ubi block device" 108*4882a593Smuzhiyun if echo $DEV | grep -q ubiblock; then 109*4882a593Smuzhiyun check_tool ubiblock BR2_PACKAGE_MTD_UBIBLOCK || return 1 110*4882a593Smuzhiyun ubiblock -r /dev/ubi${PART_NO}_0 &>/dev/null 111*4882a593Smuzhiyun fi 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun echo "Detach ubi device" 114*4882a593Smuzhiyun check_tool ubidetach BR2_PACKAGE_MTD_UBIDETACH || return 1 115*4882a593Smuzhiyun ubidetach -p $MTDDEV &>/dev/null 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun echo "Format device" 118*4882a593Smuzhiyun check_tool ubiformat BR2_PACKAGE_MTD_UBIFORMAT || return 1 119*4882a593Smuzhiyun ubiformat -yq $MTDDEV || return 1 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun echo "Attach ubi device" 122*4882a593Smuzhiyun ubiattach /dev/ubi_ctrl -m $PART_NO -d $PART_NO || return 1 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun echo "Create ubi volume" 125*4882a593Smuzhiyun check_tool ubimkvol BR2_PACKAGE_MTD_UBIMKVOL || return 1 126*4882a593Smuzhiyun ubimkvol /dev/ubi$PART_NO -N $PART_NAME -m || return 1 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun echo "Create ubi block device" 129*4882a593Smuzhiyun if echo $DEV | grep -q ubiblock; then 130*4882a593Smuzhiyun check_tool ubiblock BR2_PACKAGE_MTD_UBIBLOCK || return 1 131*4882a593Smuzhiyun ubiblock -c /dev/ubi${PART_NO}_0 || return 1 132*4882a593Smuzhiyun fi 133*4882a593Smuzhiyun} 134*4882a593Smuzhiyun 135*4882a593Smuzhiyunis_rootfs() 136*4882a593Smuzhiyun{ 137*4882a593Smuzhiyun [ $MOUNT_POINT = "/" ] 138*4882a593Smuzhiyun} 139*4882a593Smuzhiyun 140*4882a593Smuzhiyunremount_part() 141*4882a593Smuzhiyun{ 142*4882a593Smuzhiyun mountpoint -q $MOUNT_POINT || return 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun if touch $MOUNT_POINT &>/dev/null; then 145*4882a593Smuzhiyun [ "$1" = ro ] && mount -o remount,ro $MOUNT_POINT 146*4882a593Smuzhiyun else 147*4882a593Smuzhiyun [ "$1" = rw ] && mount -o remount,rw $MOUNT_POINT 148*4882a593Smuzhiyun fi 149*4882a593Smuzhiyun} 150*4882a593Smuzhiyun 151*4882a593Smuzhiyunformat_part() 152*4882a593Smuzhiyun{ 153*4882a593Smuzhiyun echo "Formatting $DEV($FSTYPE)" 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun case $FSGROUP in 156*4882a593Smuzhiyun ext2) 157*4882a593Smuzhiyun # Set max-mount-counts to 0, and disable the time-dependent checking. 158*4882a593Smuzhiyun check_tool mke2fs BR2_PACKAGE_E2FSPROGS && \ 159*4882a593Smuzhiyun mke2fs -F -L $PART_NAME $DEV && \ 160*4882a593Smuzhiyun tune2fs -c 0 -i 0 $DEV 161*4882a593Smuzhiyun ;; 162*4882a593Smuzhiyun vfat) 163*4882a593Smuzhiyun # Use fat32 by default 164*4882a593Smuzhiyun check_tool mkfs.vfat BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT && \ 165*4882a593Smuzhiyun mkfs.vfat -I -F 32 -n $PART_NAME $DEV 166*4882a593Smuzhiyun ;; 167*4882a593Smuzhiyun ntfs) 168*4882a593Smuzhiyun # Enable compression 169*4882a593Smuzhiyun check_tool mkntfs BR2_PACKAGE_NTFS_3G_NTFSPROGS && \ 170*4882a593Smuzhiyun mkntfs -FCQ -L $PART_NAME $DEV 171*4882a593Smuzhiyun ;; 172*4882a593Smuzhiyun ubifs) 173*4882a593Smuzhiyun format_ubifs 174*4882a593Smuzhiyun ;; 175*4882a593Smuzhiyun jffs2) 176*4882a593Smuzhiyun check_tool mkfs.jffs2 BR2_PACKAGE_MTD_MKFSJFFS2 && \ 177*4882a593Smuzhiyun mkfs.jffs2 -o $DEV 0x10000 --pad=0x400000 -s 0x1000 -n 178*4882a593Smuzhiyun ;; 179*4882a593Smuzhiyun squashfs) 180*4882a593Smuzhiyun # check_tool mksquashfs BR2_PACKAGE_SQUASHFS && \ 181*4882a593Smuzhiyun # mksquashfs $DEV 182*4882a593Smuzhiyun echo "It's pointness to format a squashfs partition..." 183*4882a593Smuzhiyun false 184*4882a593Smuzhiyun ;; 185*4882a593Smuzhiyun auto) 186*4882a593Smuzhiyun echo "Unable to format a auto partition..." 187*4882a593Smuzhiyun false 188*4882a593Smuzhiyun ;; 189*4882a593Smuzhiyun *) 190*4882a593Smuzhiyun echo Unsupported file system $FSTYPE for $DEV 191*4882a593Smuzhiyun false 192*4882a593Smuzhiyun ;; 193*4882a593Smuzhiyun esac 194*4882a593Smuzhiyun} 195*4882a593Smuzhiyun 196*4882a593Smuzhiyunformat_resize() 197*4882a593Smuzhiyun{ 198*4882a593Smuzhiyun BACKUP=$1 199*4882a593Smuzhiyun SRC=$(realpath $MOUNT_POINT) 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun echo "Format-resizing $DEV($FSTYPE)" 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun echo "Backup original data" 204*4882a593Smuzhiyun cp -a "$SRC" "$BACKUP/" || return 1 205*4882a593Smuzhiyun umount "$SRC" || return 1 206*4882a593Smuzhiyun 207*4882a593Smuzhiyun echo "Format and mount rw" 208*4882a593Smuzhiyun format_part || return 1 209*4882a593Smuzhiyun mount_part || return 1 210*4882a593Smuzhiyun remount_part rw 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun echo "Restore backup data" 213*4882a593Smuzhiyun cp -a "$BACKUP/$SRC" $(dirname "$SRC") || return 1 214*4882a593Smuzhiyun} 215*4882a593Smuzhiyun 216*4882a593Smuzhiyunresize_ext2() 217*4882a593Smuzhiyun{ 218*4882a593Smuzhiyun check_tool resize2fs BR2_PACKAGE_E2FSPROGS_RESIZE2FS || return 1 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun resize2fs $DEV 221*4882a593Smuzhiyun} 222*4882a593Smuzhiyun 223*4882a593Smuzhiyunresize_vfat() 224*4882a593Smuzhiyun{ 225*4882a593Smuzhiyun check_tool fatresize BR2_PACKAGE_FATRESIZE || return 1 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun SIZE=$(fatresize -i $DEV | grep "Size:" | grep -o "[0-9]*$") 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun # Somehow fatresize only works for 256M+ fat 230*4882a593Smuzhiyun [ "$SIZE" -gt $((256 * 1024 * 1024)) ] && return 1 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun MAX_SIZE=$(( $(cat $SYS_PATH/size) * 512)) 233*4882a593Smuzhiyun MIN_SIZE=$(($MAX_SIZE - 16 * 1024 * 1024)) 234*4882a593Smuzhiyun [ $MIN_SIZE -lt $SIZE ] && return 0 # Large enough! 235*4882a593Smuzhiyun while [ $MAX_SIZE -gt $MIN_SIZE ];do 236*4882a593Smuzhiyun # Somehow fatresize cannot resize to max size 237*4882a593Smuzhiyun MAX_SIZE=$(($MAX_SIZE - 512 * 1024)) 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun # Try to resize with fatresize, not always work 240*4882a593Smuzhiyun fatresize -s $MAX_SIZE $DEV && return 241*4882a593Smuzhiyun done 242*4882a593Smuzhiyun return 1 243*4882a593Smuzhiyun} 244*4882a593Smuzhiyun 245*4882a593Smuzhiyunresize_ntfs() 246*4882a593Smuzhiyun{ 247*4882a593Smuzhiyun check_tool ntfsresize BR2_PACKAGE_NTFS_3G_NTFSPROGS || return 1 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun echo y | ntfsresize -f $DEV 250*4882a593Smuzhiyun} 251*4882a593Smuzhiyun 252*4882a593Smuzhiyunresize_part() 253*4882a593Smuzhiyun{ 254*4882a593Smuzhiyun # Fixed size or already resized 255*4882a593Smuzhiyun [ -f $MOUNT_POINT/.fixed -o -f $MOUNT_POINT/.resized ] && return 256*4882a593Smuzhiyun 257*4882a593Smuzhiyun if [ -z "$FSRESIZE" ]; then 258*4882a593Smuzhiyun echo "No resize for $FSTYPE" 259*4882a593Smuzhiyun return 260*4882a593Smuzhiyun fi 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun echo "Resizing $DEV($FSTYPE)" 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun # Online resize needs read-write 265*4882a593Smuzhiyun remount_part rw 266*4882a593Smuzhiyun if eval $FSRESIZE; then 267*4882a593Smuzhiyun touch $MOUNT_POINT/.resized 268*4882a593Smuzhiyun return 269*4882a593Smuzhiyun fi 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun echo "Done with rootfs" 272*4882a593Smuzhiyun is_rootfs && return 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun echo "Fallback to format resize" 275*4882a593Smuzhiyun TEMP_BACKUP=$(mktemp -d) 276*4882a593Smuzhiyun format_resize $TEMP_BACKUP && touch $MOUNT_POINT/.resized 277*4882a593Smuzhiyun rm -rf $TEMP_BACKUP 278*4882a593Smuzhiyun} 279*4882a593Smuzhiyun 280*4882a593Smuzhiyunconvert_mount_opts() 281*4882a593Smuzhiyun{ 282*4882a593Smuzhiyun # Accept all opts by default for standard mount tool 283*4882a593Smuzhiyun if [ -z "$@" ] && [ "$(readlink $(which mount))" != busybox ]; then 284*4882a593Smuzhiyun echo $OPTS 285*4882a593Smuzhiyun return 286*4882a593Smuzhiyun fi 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun # Filter out unsupported opts 289*4882a593Smuzhiyun for opt in ${@:-$BUSYBOX_MOUNT_OPTS}; do 290*4882a593Smuzhiyun echo ${OPTS//,/ } | xargs -n 1 | grep -oE "^$opt$" 291*4882a593Smuzhiyun done | tr "\n" "," 292*4882a593Smuzhiyun} 293*4882a593Smuzhiyun 294*4882a593Smuzhiyunprepare_part() 295*4882a593Smuzhiyun{ 296*4882a593Smuzhiyun # Ignore external storages 297*4882a593Smuzhiyun case "$MOUNT_POINT" in 298*4882a593Smuzhiyun /mnt/* | /media/*) return 1 ;; 299*4882a593Smuzhiyun esac 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun # Find real dev for root dev 302*4882a593Smuzhiyun if is_rootfs; then 303*4882a593Smuzhiyun DEV_NO=$(mountpoint -d /) 304*4882a593Smuzhiyun DEV_NAME=$(grep -l "^$DEV_NO$" /sys/class/block/*/dev | \ 305*4882a593Smuzhiyun cut -d'/' -f5) 306*4882a593Smuzhiyun DEV=/dev/$DEV_NAME 307*4882a593Smuzhiyun fi 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun DEV=$(realpath $DEV 2>/dev/null) 310*4882a593Smuzhiyun PART_NO=$(echo $DEV | grep -oE "[0-9]*$") 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun # Only accept block device 313*4882a593Smuzhiyun [ -b "$DEV" ] || return 1 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun SYS_PATH=$(echo /sys/class/*/${DEV##*/}) 316*4882a593Smuzhiyun if [ -f "$SYS_PATH/name" ]; then 317*4882a593Smuzhiyun PART_NAME=$(cat $SYS_PATH/name) 318*4882a593Smuzhiyun else 319*4882a593Smuzhiyun PART_NAME=$(grep PARTNAME ${SYS_PATH}/uevent | cut -d '=' -f 2) 320*4882a593Smuzhiyun fi 321*4882a593Smuzhiyun PART_NAME=${PART_NAME:-${DEV##*/}} 322*4882a593Smuzhiyun 323*4882a593Smuzhiyun case $FSTYPE in 324*4882a593Smuzhiyun ext[234]) 325*4882a593Smuzhiyun FSGROUP=ext2 326*4882a593Smuzhiyun FSCK="fsck.$FSTYPE -y" 327*4882a593Smuzhiyun FSCK_CONFIG=BR2_PACKAGE_E2FSPROGS_FSCK 328*4882a593Smuzhiyun FSRESIZE=resize_ext2 329*4882a593Smuzhiyun ;; 330*4882a593Smuzhiyun msdos|fat|vfat) 331*4882a593Smuzhiyun FSGROUP=vfat 332*4882a593Smuzhiyun FSCK="fsck.vfat -y" 333*4882a593Smuzhiyun FSCK_CONFIG=BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT 334*4882a593Smuzhiyun FSRESIZE=resize_vfat 335*4882a593Smuzhiyun ;; 336*4882a593Smuzhiyun ntfs) 337*4882a593Smuzhiyun FSGROUP=ntfs 338*4882a593Smuzhiyun FSCK=ntfsfix 339*4882a593Smuzhiyun FSCK_CONFIG=BR2_PACKAGE_NTFS_3G_NTFSPROGS 340*4882a593Smuzhiyun FSRESIZE=resize_ntfs 341*4882a593Smuzhiyun ;; 342*4882a593Smuzhiyun ubi|ubifs) 343*4882a593Smuzhiyun FSTYPE=ubifs 344*4882a593Smuzhiyun FSGROUP=ubifs 345*4882a593Smuzhiyun unset FSCK 346*4882a593Smuzhiyun unset FSRESIZE 347*4882a593Smuzhiyun ;; 348*4882a593Smuzhiyun squashfs) 349*4882a593Smuzhiyun FSGROUP=squashfs 350*4882a593Smuzhiyun unset FSCK 351*4882a593Smuzhiyun unset FSRESIZE 352*4882a593Smuzhiyun ;; 353*4882a593Smuzhiyun jffs2) 354*4882a593Smuzhiyun FSGROUP=jffs2 355*4882a593Smuzhiyun unset FSCK 356*4882a593Smuzhiyun unset FSRESIZE 357*4882a593Smuzhiyun ;; 358*4882a593Smuzhiyun auto) 359*4882a593Smuzhiyun FSGROUP=auto 360*4882a593Smuzhiyun echo "Running fsck on a random fs is dangerous" 361*4882a593Smuzhiyun unset FSCK 362*4882a593Smuzhiyun unset FSRESIZE 363*4882a593Smuzhiyun ;; 364*4882a593Smuzhiyun *) 365*4882a593Smuzhiyun echo "Unsupported file system $FSTYPE for $DEV" 366*4882a593Smuzhiyun return 367*4882a593Smuzhiyun esac 368*4882a593Smuzhiyun 369*4882a593Smuzhiyun # Setup mount tool and opts 370*4882a593Smuzhiyun case $FSGROUP in 371*4882a593Smuzhiyun ntfs) 372*4882a593Smuzhiyun MOUNT=ntfs-3g 373*4882a593Smuzhiyun check_tool ntfs-3g BR2_PACKAGE_NTFS_3G || return 1 374*4882a593Smuzhiyun OPTS=$(convert_mount_opts "$NTFS_3G_MOUNT_OPTS") 375*4882a593Smuzhiyun ;; 376*4882a593Smuzhiyun auto) 377*4882a593Smuzhiyun MOUNT=mount 378*4882a593Smuzhiyun OPTS=$(convert_mount_opts) 379*4882a593Smuzhiyun ;; 380*4882a593Smuzhiyun *) 381*4882a593Smuzhiyun MOUNT="mount -t $FSTYPE" 382*4882a593Smuzhiyun OPTS=$(convert_mount_opts) 383*4882a593Smuzhiyun ;; 384*4882a593Smuzhiyun esac 385*4882a593Smuzhiyun MOUNT_OPTS=${OPTS:+" -o ${OPTS%,}"} 386*4882a593Smuzhiyun 387*4882a593Smuzhiyun # Prepare for UBI 388*4882a593Smuzhiyun if [ "$FSGROUP" = ubifs ]; then 389*4882a593Smuzhiyun if ! prepare_ubi; then 390*4882a593Smuzhiyun echo "Failed to prepare ubi for $DEV" 391*4882a593Smuzhiyun [ "$AUTO_MKFS" ] || return 392*4882a593Smuzhiyun 393*4882a593Smuzhiyun echo "Auto formatting" 394*4882a593Smuzhiyun format_ubifs || return 395*4882a593Smuzhiyun fi 396*4882a593Smuzhiyun fi 397*4882a593Smuzhiyun} 398*4882a593Smuzhiyun 399*4882a593Smuzhiyuncheck_part() 400*4882a593Smuzhiyun{ 401*4882a593Smuzhiyun [ "$SKIP_FSCK" -o "$PASS" -eq 0 ] && return 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun if [ -z "$FSCK" ]; then 404*4882a593Smuzhiyun echo "No fsck for $FSTYPE" 405*4882a593Smuzhiyun return 406*4882a593Smuzhiyun fi 407*4882a593Smuzhiyun 408*4882a593Smuzhiyun echo "Checking $DEV($FSTYPE)" 409*4882a593Smuzhiyun 410*4882a593Smuzhiyun check_tool "$FSCK" $FSCK_CONFIG || return 411*4882a593Smuzhiyun 412*4882a593Smuzhiyun # Fsck needs read-only 413*4882a593Smuzhiyun remount_part ro 414*4882a593Smuzhiyun 415*4882a593Smuzhiyun $FSCK $DEV 416*4882a593Smuzhiyun} 417*4882a593Smuzhiyun 418*4882a593Smuzhiyunmount_part() 419*4882a593Smuzhiyun{ 420*4882a593Smuzhiyun echo "Mounting $DEV($FSTYPE) on $MOUNT_POINT ${MOUNT_OPTS:+with$MOUNT_OPTS}" 421*4882a593Smuzhiyun $MOUNT $DEV $MOUNT_POINT $MOUNT_OPTS && return 422*4882a593Smuzhiyun [ "$AUTO_MKFS" ] || return 423*4882a593Smuzhiyun 424*4882a593Smuzhiyun echo "Failed to mount $DEV, try to format it" 425*4882a593Smuzhiyun format_part && $MOUNT $DEV $MOUNT_POINT $MOUNT_OPTS 426*4882a593Smuzhiyun} 427