Subject: Help porting scan_ffs from OpenBSD
To: None <tech-userlevel@netbsd.org>
From: Juan RP <juan@xtrarom.org>
List: tech-userlevel
Date: 05/25/2005 17:51:54
This is a multi-part message in MIME format.

--Multipart=_Wed__25_May_2005_17_51_54_+0200_GER.gY7rez=lz5d6
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit


Hi, time ago I lost the disklabel on a disk... and no backup, that was
really bad, having scan_ffs would be really nice.

It can detect FFSv1 partitions (OpenBSD has not FFSv2 support), so
after looking if FreeBSD has something like this, I found they have
scan_ffs in ports.

But there's a problem with this port, it won't find FFSv2 partitions
with block size <> 16384. 

I've found a way to detect partitions with block size == 8192 (no idea
about other block sizes, I tested only 8192 and 16384).

The workaround was adding a new flag (-t) which accepts an argument,
to detect partitions with different block sizes.

My disklabel look like:

16 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:    132048  51199155     4.2BSD   1024  8192 16512  # (Cyl.  50792*-  50923*)
 b:    525168  51331203       swap                     # (Cyl.  50923*-  51444*)
 c:  81931500  51199155     unused      0     0        # (Cyl.  50792*- 132074*)
 d: 160086528         0     unused      0     0        # (Cyl.      0 - 158815)
 e:  51199092        63       NTFS                     # (Cyl.      0*-  50792*)
 f:  12288528  51856371     4.2BSD   2048 16384 27560  # (Cyl.  51444*-  63635*)
 g:   1049328  64144899     4.2BSD   1024  8192 43728  # (Cyl.  63635*-  64676*)
 h:  67936428  65194227     4.2BSD   2048 16384 28824  # (Cyl.  64676*- 132074*)
 i:  26955873 133130655      MSDOS                     # (Cyl. 132074*- 158815)

Running scanffs with -t 1 detects my partitions with block size = 8192.

Example:

$ ./scanffs -l -t 1 -s 51000000 -e 65194227 wd0d
X: 132048 51199267 4.2BSD 1024 8192 16512 # /
X: 1049328 64145011 4.2BSD 1024 8192 43728 # /var
$

Running scanffs without -t (default value: 2), it detects my partitions
 with block size = 16384:

$ ./scanffs -l -s 51000000 -e 133130655 wd0d
X: 12288528 51856499 4.2BSD 2048 16384 93096 # /usr
X: 67936428 65194355 4.2BSD 2048 16384 94360 # /home
$

I assume that specifying t = 3 or 4 will catch partitions with block size 
32K and 64K, respectively.

I've attached the modified scanffs source, suggestions and fixes for
this problem are welcome.

That would be really cool if we have this in the src tree, in the future
we might use it with sysinst...

Thanks.

--Multipart=_Wed__25_May_2005_17_51_54_+0200_GER.gY7rez=lz5d6
Content-Type: application/octet-stream;
 name="scanffs.c"
Content-Disposition: attachment;
 filename="scanffs.c"
Content-Transfer-Encoding: base64

LyogICAgICBPcGVuQlNEOiBzY2FuX2Zmcy5jLHYgMS4xMSAyMDA0LzAyLzE2IDE5OjEzOjAzIGRl
cmFhZHQgRXhwCSovCi8qCSROZXRCU0QkCSovCgovKgogKiBDb3B5cmlnaHQgKGMpIDE5OTggTmlr
bGFzIEhhbGxxdmlzdCwgVG9iaWFzIFdlaW5nYXJ0bmVyCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICogYXJlIG1ldDoKICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgogKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycg
QU5EIEFOWSBFWFBSRVNTIE9SCiAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKICogT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4K
ICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULAogKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAogKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICov
CgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KI2luY2x1ZGUg
PHN5cy9mY250bC5oPgojaW5jbHVkZSA8dWZzL2Zmcy9mcy5oPgojaW5jbHVkZSA8dW5pc3RkLmg+
CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcu
aD4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPGVyci5oPgojaW5jbHVkZSA8dXRpbC5oPgoK
LyogRmxhZ3MgdG8gY29udHJvbCBvdXJzZWx2ZXMuLi4gKi8KI2RlZmluZSBGTEFHX1ZFUkJPU0Ug
ICAgICAgICAgICAxCiNkZWZpbmUgRkxBR19TTUFSVCAgICAgICAgICAgICAgMgojZGVmaW5lIEZM
QUdfTEFCRUxTICAgICAgICAgICAgIDQKCiNkZWZpbmUgU0JDT1VOVAkJCTY0IC8qIFhYWCBzaG91
bGQgYmUgY29uZmlndXJhYmxlICovCgpjaGFyCWRldmljZVtNQVhQQVRITEVOXTsKCnN0YXRpYyB2
b2lkIHVzYWdlKHZvaWQpOwpzdGF0aWMgaW50IGJzaXplOwpzdGF0aWMgaW50IHRmbGFnOwoKc3Rh
dGljIGludAp1ZnNzY2FuKGludCBmZCwgZGFkZHJfdCBiZWcsIGRhZGRyX3QgZW5kLCBpbnQgZmxh
Z3MpCnsKCXN0YXRpYyBjaGFyIGxhc3Rtb3VudFtNQVhNTlRMRU5dOwoJc3RhdGljIHVfaW50OF90
IGJ1ZltTQkxPQ0tTSVpFICogU0JDT1VOVF07CglzdHJ1Y3QgZnMgKnNiOwoJZGFkZHJfdCBibGss
IGxhc3RibGs7CglpbnQgbjsKCglsYXN0YmxrID0gLTE7CgltZW1zZXQobGFzdG1vdW50LCAwLCBN
QVhNTlRMRU4pOwoKICAgICAgICBmb3IgKGJsayA9IGJlZzsgYmxrIDw9ICgoZW5kIDwwKSA/IGJs
azogZW5kKTsKCSAgICAgYmxrICs9IChTQkNPVU5UICogU0JMT0NLU0laRSAvIDUxMikpIHsKCgkJ
bWVtc2V0KGJ1ZiwgMCwgU0JMT0NLU0laRSAqIFNCQ09VTlQpOwoKCQlpZiAobHNlZWsoZmQsIChv
ZmZfdClibGsgKiA1MTIsIFNFRUtfU0VUKSA8IDApCgkJCWVycigxLCAibHNlZWsiKTsKCgkJaWYg
KHJlYWQoZmQsIGJ1ZiwgU0JMT0NLU0laRSAqIFNCQ09VTlQpIDwgMCkKCQkJZXJyKDEsICJyZWFk
Iik7CgoJCWZvciAobiA9IDA7IG4gPCAoU0JMT0NLU0laRSAqIFNCQ09VTlQpOyBuICs9IDUxMikg
ewoJCQlzYiA9IChzdHJ1Y3QgZnMqKSgmYnVmW25dKTsKCQkJY29uc3QgY2hhciAqZnN0eXBlOwoK
CQkJaWYgKHNiLT5mc19tYWdpYyA9PSBGU19VRlMxX01BR0lDIHx8CgkJCQlzYi0+ZnNfbWFnaWMg
PT0gRlNfVUZTMl9NQUdJQykgewoKCQkJCXN3aXRjaCAoc2ItPmZzX21hZ2ljKSB7CgkJCQkJY2Fz
ZSBGU19VRlMxX01BR0lDOgoJCQkJCQlzYi0+ZnNfc2l6ZSA9IHNiLT5mc19vbGRfc2l6ZTsKCQkJ
CQkJZnN0eXBlID0gImZmcyI7CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgRlNfVUZTMl9NQUdJQzoK
CQkJCQkJZnN0eXBlID0gImZmczIiOwoJCQkJCQlicmVhazsKCQkJCQlkZWZhdWx0OgoJCQkJCQlm
c3R5cGUgPSBOVUxMOwoJCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmIChmbGFncyAmIEZMQUdfVkVS
Qk9TRSkKCQkJCQlwcmludGYoImJsb2NrOiAlIiBQUklkNjQiICIKCQkJCQkJImlkICV4LCV4IHNp
emUgJSIgUFJJZDY0IlxuIiwgCgkJCQkJCWJsaysobi81MTIpLCBzYi0+ZnNfaWRbMF0sCgkJCQkJ
CXNiLT5mc19pZFsxXSwgc2ItPmZzX3NpemUpOwoKCQkJCWlmICgoKGJsaysobi81MTIpKSAtIGxh
c3RibGspID09IChic2l6ZSpTQkxPQ0tTSVpFLzUxMikpIHsKCQkJCQlpZiAoZmxhZ3MgJiBGTEFH
X0xBQkVMUyApIHsKCQkJCQkJcHJpbnRmKCJYOiAlIiBQUklkNjQiIgoJCQkJCQkiICUiIFBSSWQ2
NCAiIgoJCQkJCQkiIDQuMkJTRCAlZCAlZCAlZCAjICVzXG4iLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCShkYWRkcl90KSgob2ZmX3Qpc2ItPmZzX3NpemUgKgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCXNiLT5mc19mc2l6ZSAvIDUxMiks
CgkJCQkJCWJsaysobi8oNTEyKSktKCgyKlNCTE9DS1NJWkUvNTEyKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAJc2ItPmZzX2ZzaXplLCBzYi0+ZnNfYnNpemUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJc2ItPmZzX2ZwZywgbGFzdG1v
dW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCX0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJcHJpbnRmKCIlcyBhdCAlIiBQUklkNjQg
Iiwgc2l6ZSAlIiBQUklkNjQgIiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAkiLCBsYXN0IG1vdW50ZWQgb24gJXNcbiIsCgkJCQkgICAgICAgIAlmc3R5cGUsCgkJCQkJ
CWJsaysobi8oNTEyKSktKCgyKlNCTE9DS1NJWkUvNTEyKSksCgkJCQkJCShzYi0+ZnNfc2l6ZSAq
IHNiLT5mc19mc2l6ZSAvIDUxMiksCgkJCQkJCWxhc3Rtb3VudCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAl9CgkJCQkJaWYgKGZsYWdzICYgRkxBR19TTUFSVCkgewoJCQkJCQlv
ZmZfdCBzaXplID0gKG9mZl90KXNiLT5mc19zaXplICoKCQkJCQkJc2ItPmZzX3NpemU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlpZiAoKG4gKyBzaXplKSA8IChTQkxPQ0tTSVpF
ICogU0JDT1VOVCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJbiArPSBzaXpl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAJCWJsayArPSAoc2l6ZS81MTIgLSAoU0JDT1VOVCpT
QkNPVU5UKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCWJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJfQoJCQkJCX0KCQkJCX0KCQkJLyog
VXBkYXRlIGxhc3QgcG90ZW50aWFsIEZTIFNCcyBzZWVuICovCgkJCWxhc3RibGsgPSBibGsgKyAo
bi81MTIpOwoJCQltZW1jcHkobGFzdG1vdW50LCBzYi0+ZnNfZnNtbnQsIE1BWE1OVExFTik7CgkJ
CX0KCQl9Cgl9CglyZXR1cm4gMDsKfQoKCnN0YXRpYyB2b2lkCnVzYWdlKHZvaWQpCnsKICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlcyBbLWxoZnZdIFstcyBzdGFydF0gWy1lIGVuZF0g
ZGV2aWNlXG4iLAogICAgICAgICAgICBnZXRwcm9nbmFtZSgpKTsKICAgICAgICBleGl0KDEpOwp9
CgoKaW50Cm1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgICAgIGludCBjaCwgZmQs
IGZsYWdzID0gMDsKICAgICAgICBkYWRkcl90IGJlZyA9IDAsIGVuZCA9IC0xOwoKCXNldHByb2du
YW1lKGFyZ3ZbMF0pOwoKICAgICAgICB3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJs
ZnZzOmU6dDpoIikpICE9IC0xKQogICAgICAgICAgICAgICAgc3dpdGNoKGNoKSB7CgkJY2FzZSAn
dCc6CgkJCXRmbGFnID0gMTsKCQkJc3dpdGNoIChhdG9pKG9wdGFyZykpIHsKCQkJCWNhc2UgMTog
Y2FzZSAyOiBjYXNlIDM6IGNhc2UgNDoKCQkJCQlic2l6ZSA9IGF0b2kob3B0YXJnKTsKCQkJCQli
cmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJYnNpemUgPSAyOyAvKiB0aGlzIHZhbHVlIGF0IGxlYXN0
CgkJCQkJCSAgICAqIHdvcmtzIGZpbmUgZm9yIEZGU3YxCgkJCQkJCSAgICAqIHBhcnRpdGlvbnMK
CQkJCQkJICAgICovCgkJCQkJYnJlYWs7CgkJCX0KCQkJYnJlYWs7CiAgICAgICAgICAgICAgICBj
YXNlICdzJzoKICAgICAgICAgICAgICAgICAgICAgICAgYmVnID0gYXRvaShvcHRhcmcpOwogICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2UnOgogICAg
ICAgICAgICAgICAgICAgICAgICBlbmQgPSBhdG9pKG9wdGFyZyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAndic6CiAgICAgICAgICAgICAgICAg
ICAgICAgIGZsYWdzIHw9IEZMQUdfVkVSQk9TRTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICBjYXNlICdmJzoKICAgICAgICAgICAgICAgICAgICAgICAgZmxh
Z3MgfD0gRkxBR19TTUFSVDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICBjYXNlICdsJzoKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gRkxBR19M
QUJFTFM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoJCWNhc2UgJ2gnOgogICAgICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UoKTsKCQkJYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5PVFJFQUNIRUQgKi8KICAgICAgICB9CiAg
ICAgICAgYXJnYyAtPSBvcHRpbmQ7CiAgICAgICAgYXJndiArPSBvcHRpbmQ7CgogICAgICAgIGlm
IChhcmdjICE9IDEpCiAgICAgICAgICAgICAgICB1c2FnZSgpOwoKCWlmICghdGZsYWcpCgkJYnNp
emUgPSAyOyAvKiBhc3NpZ24gZGVmYXVsdCB2YWx1ZSAqLwoKICAgICAgICBmZCA9IG9wZW5kaXNr
KGFyZ3ZbMF0sIE9fUkRPTkxZLCBkZXZpY2UsIHNpemVvZihkZXZpY2UpLCAwKTsKICAgICAgICBp
ZiAoZmQgPCAwKQogICAgICAgICAgICAgICAgZXJyKDEsICIlcyIsIGFyZ3ZbMV0pOwoKICAgICAg
ICByZXR1cm4gKHVmc3NjYW4oZmQsIGJlZywgZW5kLCBmbGFncykpOwp9Cg==

--Multipart=_Wed__25_May_2005_17_51_54_+0200_GER.gY7rez=lz5d6--