#!/bin/sh BLK=$1 FORMAT_ONLY=$2 MNT_OLD="/mnt/convert_old" MNT_NEW="/mnt/convert_new" function log() { if [ ! -z "$1" ]; then echo "partition_convert: $1" > /dev/kmsg fi } function check_success() { if [ $? -ne 0 ]; then log "Failed: $1" exit -1 fi log "Success: $1" } F2FS_MAGIC=$(xxd $BLK -s 0x400 -l 4 -p) if [ "$F2FS_MAGIC" = "1020f5f2" ]; then log "$BLK is already f2fs - skipping" exit 0 fi EXT4_MAGIC=$(xxd $BLK -s 0x438 -l 2 -p) if [ "$EXT4_MAGIC" != "53ef" ]; then log "Unknown filesystem $EXT4_MAGIC" exit -1 fi if [ $FORMAT_ONLY == "true" ]; then make_f2fs $BLK 2>&1 > /dev/null check_success "make_f2fs $BLK" sync check_success "sync" exit 0 fi mkdir -p $MNT_OLD check_success "mkdir $MNT_OLD" mkdir -p $MNT_NEW check_success "mkdir $MNT_NEW" mount -t ext4 $BLK $MNT_OLD check_success "mount $MNT_OLD as ext4" mount -t tmpfs tmpfs $MNT_NEW check_success "mount $MNT_NEW as tmpfs" cp -rp $MNT_OLD/* $MNT_NEW/ check_success "copy $MNT_OLD to $MNT_NEW" umount $MNT_OLD check_success "umount $MNT_OLD" make_f2fs $BLK 2>&1 > /dev/null check_success "make_f2fs $BLK" mount -t f2fs $BLK $MNT_OLD check_success "mount $MNT_OLD as f2fs" cp -rp $MNT_NEW/* $MNT_OLD/ check_success "copy $MNT_NEW to $MNT_OLD" sync check_success "sync" umount $MNT_OLD check_success "umount $MNT_OLD" umount $MNT_NEW check_success "umount $MNT_NEW" rmdir $MNT_OLD check_success "rmdir $MNT_OLD" rmdir $MNT_NEW check_success "rmdir $MNT_NEW"