gs201: add script to convert persist to f2fs
Currently the persist partition is formatted as ext4. In order to convert the partition to f2fs without losing data, add a script which will copy the partition contents out, format the partition as f2fs and then copy the contents back. Bug: 202511062 Signed-off-by: Konstantin Vyshetsky <vkon@google.com> Change-Id: I89502694d1e02261902525c11ac875dd7756721b
This commit is contained in:
parent
e8d42059e6
commit
7b4f21e81d
3 changed files with 87 additions and 0 deletions
|
@ -14,6 +14,8 @@ service vendor.charger /system/bin/charger
|
|||
file /proc/last_kmsg r
|
||||
|
||||
on early-init
|
||||
# Convert /dev/block/by-name/persist to f2fs
|
||||
exec -- /vendor/bin/convert_to_f2fs.sh /dev/block/by-name/persist false
|
||||
mount_all /vendor/etc/fstab.persist --early
|
||||
|
||||
on init
|
||||
|
|
81
convert_to_f2fs.sh
Normal file
81
convert_to_f2fs.sh
Normal file
|
@ -0,0 +1,81 @@
|
|||
#!/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"
|
|
@ -286,6 +286,10 @@ PRODUCT_PACKAGES += \
|
|||
tune2fs.vendor_ramdisk \
|
||||
resize2fs.vendor_ramdisk
|
||||
|
||||
# Filesystem: convert /dev/block/by-name/persist to f2fs
|
||||
PRODUCT_COPY_FILES += \
|
||||
device/google/gs201/convert_to_f2fs.sh:$(TARGET_COPY_OUT_VENDOR)/bin/convert_to_f2fs.sh \
|
||||
|
||||
# Userdata Checkpointing OTA GC
|
||||
PRODUCT_PACKAGES += \
|
||||
checkpoint_gc
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue