add fstype command to detect 9660, kfs and cwfs filesystems

This commit is contained in:
cinap_lenrek 2011-04-21 10:40:03 +00:00
parent a7db29c663
commit 19a82a2654
3 changed files with 73 additions and 14 deletions

57
rc/bin/fstype Executable file
View file

@ -0,0 +1,57 @@
#!/bin/rc
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 >[2]/dev/null | \
awk '
/^kfs/{fs["kfs"]++}
/^(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
}
'

View file

@ -3,12 +3,14 @@
fn showlocaldevs{
echo local devices found:
for(c in /dev/sd*/ctl){
if(test -r $c){
d=`{echo $c | sed 's,/ctl,,g'}
echo $d':' `{sed 's/inquiry[ ]+//g; q' $c}
for(i in `{ls -p $d | grep -v -e 'ctl|raw'})
echo $d'/'$i
echo $d'/'$i `{fstype $d'/'$i}
echo
}
}
}
fn configlocal{
@ -24,16 +26,15 @@ fn configlocal{
}
fn connectlocal{
part=`{echo $* | sed 's,.*/([^ ]+),\1,g'}
part=$part(1)
switch($part){
case kfs fs
must disk/kfs -n boot -f $*
case cwfs fscache fsworm w0 w1 w2 w3
must cwfs64x -n boot -f $*
case data
t=`{fstype $1}
if(~ $#t 0)
fatal unknown fstype $1
switch($t){
case 9660
must 9660srv -f $* boot
case kfs
must disk/kfs -n boot -f $*
case *
fatal unknown partition $part
must $t -n boot -f $*
}
}

View file

@ -39,6 +39,7 @@ rc
local.rc 555 sys sys ../boot/local.rc
tcp.rc 555 sys sys ../boot/tcp.rc
bin
fstype
diskparts
bootrc 555 sys sys ../boot/bootrc
tmp