NetBSD-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
sbin/fsck_msdosfs does not handle media with 2K blocks (fwd)
Hi netbsd-users%NetBSD.org@localhost,
Last night I sent the post below to hackers%freebsd.org@localhost
Greg Troxel <gdt%ir.bbn.com@localhost> kindly suggested I also send it here to
netbsd-users%NetBSD.org@localhost
(which I am also subscribed to, BTW, but happy to receive CC anyway)
Hopefully BSDs can share a solution :-)
Archives of any subsequent follow up:
http://lists.freebsd.org/pipermail/freebsd-hackers/2013-March/042154.html
http://mail-index.netbsd.org/netbsd-users/tindex.html
src/:
http://cvsweb.netbsd.org/bsdweb.cgi/src/sbin/fsck_msdos/boot.c?rev=1.15&content-type=text/x-cvsweb-markup&only_with_tag=MAIN
http://svnweb.freebsd.org/base/head/sbin/fsck_msdosfs/boot.c?revision=241807&view=markup
Forwarded from: "Julian Stacey" <jhs%berklix.com@localhost>
http://www.berklix.com/~jhs/
------- Forwarded Message
Message-Id: <201303010045.r210j3IF038754%fire.js.berklix.net@localhost>
To: hackers%freebsd.org@localhost
Subject: sbin/fsck_msdosfs does not handle media with 2K blocks
Date: Fri, 01 Mar 2013 01:45:03 +0100
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-hackers>
Hi hackers%freebsd.org@localhost
cc: gdt@NetBSD, paulp%uts.amdahl.com@localhost (< grep @
src/sbin/fsck_msdosfs/*.c)
cc: rnordier%FreeBSD.org@localhost (< man newfs_msdos)
cc: Tom Rhodes <trhodes%FreeBSD.org@localhost> (< man 5 msdosfs>
sbin/fsck_msdosfs (FreeBSD 9.1-RELEASE) fails on 2K block media,
media in this case, an mp3 player: http://www.berklix.com/~jhs/txt/sigmatel/
sysctl kern.geom.debugflags=16
kern.geom.debugflags: 16 -> 16
/sbin/fsck_msdosfs /dev/da0s1
** /dev/da0s1
could not read boot block (Invalid argument)
devd.conf:
"vendor" "0x066f"; "product" "0x8000"; "devclass" "0x00";
"devsubclass" "0x00"; "intclass" "0x08"; "intsubclass"
"0x06"; "intprotocol" "0x50" ; "release" "0x1001";
/sys/dev/usb/usbdevs: vendor SIGMATEL 0x066f Sigmatel
dd if=/dev/da0 bs=2k of=da0 # 242304+0 records 496238592 bytes
dd if=/dev/da0s1 bs=2k of=da0s1 # 242256+0 records 496140288 bytes
echo "2048 242304 * p" | dc # 496238592
echo "2048 242256 * p" | dc # 496140288
fdisk /dev/da0
cylinders=118 heads=64 sectors/track=32 (2048 blks/cyl)
Media sector size is 2048
Warning: BIOS sector numbering starts with sector 1
Information from DOS bootblock is:
The data for partition 1 is:
sysid 6 (0x06),(Primary DOS, 16 bit FAT (>= 32MB))
start 48, size 242256 (473 Meg), flag 80 (active)
beg: cyl 0/ head 1/ sector 1;
end: cyl 630/ head 7/ sector 48
( I think this unit's FS got corrupted. Possibly as part of media error ?
This unit (when not USB connected, but powered on battery as a
player, flashed its LCD display on & off, (ame warning as to also
indicate a low battery) whereas other units of same type with
same battery powered up OK, & battery is OK, so player is probably
also seeing a bad FS. )
I tried this:
sysctl kern.geom.debugflags=16
dd if=/dev/da0s1 bs=2k of=image
mdconfig -a -t vnode -f image
/sbin/fsck_msdosfs -y /dev/md2
** /dev/md2
** Phase 1 - Read and Compare FATs
** Phase 2 - Check Cluster Chains
** Phase 3 - Checking Directories
/audio has entries after end of directory
Extend? yes
/audio has entries after end of directory
Extend? yes
long filename record cluster start != 0
Invalid long filename entry for volume label
Remove? yes
** Phase 4 - Checking for Lost Files
139 files, 60280 free (7535 clusters)
***** FILE SYSTEM WAS MODIFIED *****
... Repeating fsck above, shows the same errors above ...
newfs_msdos -F 16 -S 2048 /dev/md2
newfs_msdos: Cannot get number of sectors per track,
Operation not supported
newfs_msdos: Cannot get number of heads,
Operation not supported
newfs_msdos: trim 21 sectors to adjust to a multiple of 63
/dev/md2: 242192 sectors in 15137 FAT16 clusters
(32768 bytes/cluster)
BytesPerSec=2048 SecPerClust=16 ResSectors=1 FATs=2
RootDirEnts=512 Media=0xf0 FATsecs=15 SecPerTrack=63
Heads=16 HiddenSecs=0 HugeSectors=242235
/sbin/fsck_msdosfs -y /dev/md2
** /dev/md2
** Phase 1 - Read and Compare FATs
** Phase 2 - Check Cluster Chains
** Phase 3 - Checking Directories
** Phase 4 - Checking for Lost Files
1 files, 484384 free (15137 clusters)
mount -t msdosfs /dev/md2 /mnt
cp SETTINGS.DAT /mnt
umount /mnt
mdconfig -d -u 2
dd if=image bs=2k of=/dev/da0s1
dd: /dev/da0s1: Input/output error
80+0 records in 79+0 records out
161792 bytes transferred in 32.715037 secs (4945 bytes/sec)
... Remove & Reinsert & waited for devd & unmounted after auto-mount...
Repeated dd & same error.
... Remove & Reinsert & wait for devd automount
ls /usb/sigmatel ... it has the new empty FS with SETTINGS.DAT
... but still the LCD flashes
fdisk -B /dev/da0
fdisk: /boot/mbr: length must be a multiple of sector size
cat /boot/mbr /boot/mbr /boot/mbr /boot/mbr > /boot/mbr2k
fdisk -B -b /boot/mbr2k /dev/da0
Should we write new partition table? [n] y
... still the LCD flashes
fdisk -i /dev/da0
fdisk -u /dev/da0
( Not Tried: newfs_msdos with -s 512 to see if the Sigmatel chipset
will play it, but not much point as fdisk says 2K ... )
So it seems this particular unit has a problem (that other units
of same manufacture here do not have). I can't think what else to try ?
It seems I discovered a limitation in FreeBSD (while doing the above):
We should hack various sources to [also?] allow R/W of 2K
media blocks , eg inc. here:
/usr/src/sbin/fsck_msdosfs/
dosfs.h:
#define DOSBOOTBLOCKSIZE 512
boot.c:
readboot(int dosfs, struct bootblock *boot)
{
u_char block[DOSBOOTBLOCKSIZE];
if (read(dosfs, block, sizeof block) != sizeof block) {
perror("could not read boot block");
Who might best hack those sources ?
Maybe someone since 1997 Wolfgang Solfrank & 1995 Martin Husemann
be interested?
Cheers,
Julian
- --
Julian Stacey, BSD Unix Linux C Sys Eng Consultant, Munich http://berklix.com
Reply below not above, like a play script. Indent old text with "> ".
Send plain text. No quoted-printable, HTML, base64, multipart/alternative.
_______________________________________________
freebsd-hackers%freebsd.org@localhost mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to
"freebsd-hackers-unsubscribe%freebsd.org@localhost"
------- End of Forwarded Message
Home |
Main Index |
Thread Index |
Old Index