d8999511e0
devfs crypto partitions do not support unaligned reads, so we make a copy of the first in /env/block and then slice it to find filesystem signatures. thanks mykhal for reporting the issue.
79 lines
1.6 KiB
Bash
Executable file
79 lines
1.6 KiB
Bash
Executable file
#!/bin/rc
|
|
rfork e
|
|
m=`{dd -if $1 -bs 2048 -skip 16 >[2]/dev/null | xd -c | sed 1q | \
|
|
sed 's/.........(....................).*/\1/; s/ //g'}
|
|
if(~ $"m 01CD00101){
|
|
echo 9660
|
|
exit
|
|
}
|
|
dd -if $1 -count 1 >/env/block >[2]/dev/null
|
|
fn fat {
|
|
m=`{dd -if /env/block -bs 1 -count 3 -skip $1 >[2]/dev/null}
|
|
~ $"m FAT
|
|
}
|
|
if(fat 54 || fat 82){
|
|
echo dos
|
|
exit
|
|
}
|
|
m=`{dd -if /env/block -bs 4 -count 1 >[2]/dev/null | xd | sed 's,0000000 ,,;q'}
|
|
if(~ $"m 529ab12b){
|
|
echo paqfs
|
|
exit
|
|
}
|
|
if(~ $"m 011ce50d){
|
|
echo hjfs
|
|
exit
|
|
}
|
|
m=`{dd -if /env/block -bs 16 -count 1 -skip 16 >[2]/dev/null}
|
|
if(~ $"m 'kfs wren device'){
|
|
echo kfs
|
|
exit
|
|
}
|
|
</env/block awk '
|
|
/^(blocksize|daddrbits|daddrbits|indirblks|dirblks|namelen)/{p[$1]=$2}
|
|
END{
|
|
ca["fs", "blocksize"] = 4*1024
|
|
ca["fs", "namelen"] = 28
|
|
ca["fs", "dirblks"] = 6
|
|
ca["fs", "indirblks"] = 2
|
|
ca["fs", "daddrbits"] = 32
|
|
|
|
ca["fs64", "blocksize"] = 8*1024
|
|
ca["fs64", "namelen"] = 56
|
|
ca["fs64", "dirblks"] = 6
|
|
ca["fs64", "indirblks"] = 4
|
|
ca["fs64", "daddrbits"] = 64
|
|
|
|
ca["cwfs", "blocksize"] = 16*1024
|
|
ca["cwfs", "namelen"] = 28
|
|
ca["cwfs", "dirblks"] = 6
|
|
ca["cwfs", "indirblks"] = 2
|
|
ca["cwfs", "daddrbits"] = 32
|
|
|
|
ca["cwfs64", "blocksize"] = 16*1024
|
|
ca["cwfs64", "namelen"] = 56
|
|
ca["cwfs64", "dirblks"] = 6
|
|
ca["cwfs64", "indirblks"] = 4
|
|
ca["cwfs64", "daddrbits"] = 64
|
|
|
|
ca["cwfs64x", "blocksize"] = 16*1024
|
|
ca["cwfs64x", "namelen"] = 144
|
|
ca["cwfs64x", "dirblks"] = 6
|
|
ca["cwfs64x", "indirblks"] = 4
|
|
ca["cwfs64x", "daddrbits"] = 64
|
|
|
|
for(e in ca){
|
|
split(e, k, SUBSEP)
|
|
if(ca[k[1],k[2]] == p[k[2]])
|
|
fs[k[1]]++
|
|
}
|
|
for(i in fs)
|
|
if(fs[i] > fs[j])
|
|
j=i
|
|
if(fs[j]){
|
|
print j
|
|
exit
|
|
}
|
|
exit 1
|
|
}
|
|
'
|