ansitest/ZFS/zfs-on-optical-disc.sh

91 lines
2.9 KiB
Bash
Raw Permalink Normal View History

2022-04-16 18:04:54 -05:00
#!/bin/bash5
# osx, should adapt easily to linux
# REF: http://girlyngeek.blogspot.com/2014/02/zfs-on-read-only-devices.html
# Having trouble importing zpool on osx from "raw" write w/no containing filesystem,
# decided to switch to UDF filesystem for optical - mount that and import zfs file-based pool
# failexit.mrg
function failexit () {
echo '! Something failed! Code: '"$1 $2" # code # (and optional description)
exit $1
}
userowns=dave # xxx TODO EDITME
# xxx EDITME
zpfile=zopticalpool
fsize=4400 # MB - for standard DVD+/-R
howmany=1 # for 4.7G DVD+RW
function mkpool () {
echo "o $PWD - Creating optical zpool of $howmany""x$fsize"" MB"
for z in $(seq 1 $howmany); do
time gdd if=/dev/zero of="$zpfile"_$z bs=1M conv=sparse count=$fsize \
|| failexit 99 "Failed to DD output zpool file $z"
done
}
# Only if not exist
[ -e "$zpfile"_1 ] || mkpool
chown -v $userowns $zpfile*
# xxx EDITME
zp=myzfsdvd
devs=$(echo $PWD/zopticalpool_*)
# -O mountpoint=$HOME/myzfsdvd -O checksum=sha256 \
# NOTE RAID0
zpool create -o ashift=11 -o failmode=continue -o autoexpand=off -o autoreplace=off \
-O checksum=sha256 -O compression=gzip-9 -O dedup=on \
-O atime=off -O devices=off -O exec=off -O setuid=off \
$zp $devs \
|| failexit 101 "Failed to create zpool $zp"
mp=$(zfs get mountpoint $zp |tail -n 1 |awk '{print $3}')
#NAME PROPERTY VALUE SOURCE
#myzfsdvd mountpoint /Volumes/myzfsdvd default
#/Volumes/myzfsdvd
# osx
[ $(df |grep -c Volumes/$zp) -gt 0 ] && chown -v $userowns /Volumes/$zp
# Linux
[ -e /$zp ] && chown -v $userowns /$zp
zpool status -v $zp |awk 'NF>0'
ls -al $mp
echo ''
gdf -hT |head -n 1
gdf -hT |grep $zp
echo '====='
echo "To burn to disc, FIRST zpool export $zp"
echo "To re-import $zp -- mount dvd, cd to it, then zpool import -o readonly=on $zp -d \$PWD"
echo "/Volumes/zfsoptical # zpool import -a -o readonly=on -d \$PWD" > howto-reimport-zpool.txt
cp -v $0 $PWD
exit;
# OSX disc burning REF: https://support.apple.com/guide/mac-help/burn-cds-and-dvds-mchl8addfd95/12.0/mac/12.0
# to burn dvd on osx from files, better to use "burn" app as it can also Erase RW discs
# For larger media, e.g. 50GB Bluray, might want to do copies=2 and forgo raidz1 as seeking will slow down I/O
declare -A ASsector # assoc array
ASsector[74min]=333000 # for 74-min CD-Rs and CD-RWs / 650MB
ASsector[80min]=360000 # for 80-min CD-Rs and CD-RWs / 700MB
ASsector[dvd]=2298496 # for single-layer DVD-Rs
ASsector[dvddouble]=4171712 # for double-layer DVD-Rs
ASsector[dvdplusr]=2295104 # for single-layer DVD+Rs
ASsector[dvdplusr2]=4173824 # for double-layer DVD+Rs
ASsector[bluray]=12219392 # for single-layer Blu-rays
ASsector[bluray2]=24438784 # for double-layer Blu-rays
ASsector[bluray3]=48878592 # for triple-layer Blu-rays
ASsector[bluray4]=62500864 # for quad-layer Blu-rays
usesector=${ASsector[dvdplusr]}
#echo $usesector