Acceptable storage systems: F2FS, exFAT, CEPH, RAID1
Unacceptable: RAID 5 etc, NTFS, Ext4, …
mkfs.f2fs -s64 -o0 -t0 -a0 /dev/sda1 mount -t f2fs -onoinline_data,noatime,flush_merge,no_heap,extent_cache,noacl,active_logs=2 /dev/sda1 /mnt
or if this drive identify as a host-aware zoned device
mkfs.f2fs -fm /dev/sda1 mount -t f2fs -onoinline_data,discard,noatime,flush_merge,no_heap,extent_cache,noacl,active_logs=2 /dev/sda1 /mnt
#!/bin/bash
# source:
# https://www.reddit.com/r/linuxquestions/comments/lhl03r/ext4_or_btrfs_filesystem_on_smr_drive/
# https://unix.stackexchange.com/questions/541463/how-to-prevent-disk-i-o-timeouts-which-cause-disks-to-disconnect-and-data-corrup
smr_fix() {
DEVICE=`echo "$1" | cut -f3 -d/`
#echo $DEVICE
echo 3600 > /sys/block/$DEVICE/device/timeout
echo 3600 > /sys/block/$DEVICE/device/eh_timeout
echo none > /sys/block/$DEVICE/queue/scheduler
echo 1 > /sys/block/$DEVICE/device/queue_depth
echo 4 > /sys/block/$DEVICE/queue/nr_requests
}
drives=`ls /dev/sd*[a-z]`
for path in $drives
do
# model=`hdparm -i "$path" | grep -oe 'Model=[^,]*' | cut -f2 -d=`
# model=`hdparm -I "$path" | grep Model\ Number: | cut -f2 -d: | sed 's/ //g'`
model=`smartctl -i "$path" | grep -Ee 'Product|Device Model' | cut -f2 -d: | sed 's/ //g'`
case "$model" in
ST4000LM024-2AN17V)
smr=1
;;
ST5000LM000-2AN170)
smr=1
;;
*)
smr=0
;;
esac
# echo "$path = $model = smr: $smr"
if [ $smr -eq 1 ]
then
echo "SMR drive $model @ $path"
smr_fix "$path"
fi
done