Date: 28 Sep 1998 14:49:17 +0200 From: dag-erli@ifi.uio.no (Dag-Erling C. =?iso-8859-1?Q?Sm=F8rgrav?= ) To: scsi@FreeBSD.ORG Subject: mt fsf 1 times out Message-ID: <xzphfxs767m.fsf@bergelmir.ifi.uio.no>
next in thread | raw e-mail | index | archive | help
I had a CAM+softupdates crash yesterday (no panic message, no core
dump, no nothing; I suspect the kernel dropped into the debugger,
which doesn't work too well if X is running. When I rebooted, I found
my /usr totally hosed (looks like the root directory entry had been
blown away) and fsck failed miserably ("no space in lost+found,
sorry"), so I thought what the heck, I have a week-old level 0 dump
and there's nothing in /usr except the "usual" (bin, sbin, libexec,
share, and X) since I have /usr/local, /usr/src and /usr/obj on
separate file systems, and my ports tree is in /usr/local (which
allows me to mount /usr ro - unfortunately, it wasn't ro when the
crash happened for some reason I can't remember). So I newfs'ed /usr,
copied back what I needed (make, mtree, a couple of libs) from
/usr/obj/elf/usr/src/tmp/usr/*, recreated the /usr hierarchy with
'mtree -eU' and ran make install. So far so good.
But now I want to restore my X tree (/usr/X11R6) from tape. The
problem is that there are several dumps on the tape, and I can't seek
to the right one. Here's what the tape looks like (from memory):
1) level 0 dump of /
2) level 0 dump of /home <--- this is a biggie
3) level 0 dump of /usr <--- this is the one I want
4) level 0 dump of /var
5) level 0 dump of /home/cvs
6) level 0 dump of /home/ncvs
The reason why /home is so big is that I have two complete FreeBSD
distributions laid out under /home/ftp (for network installs). I agree
it's kinda dumb to dump it to tape when I have them on CD-ROM, but I
just stuffed in the tape and ran the script (which extracts the list
of file systems to dump from /etc/fstab, which is the reason for the
boneheaded layout - /home should have been last)
The problem is that 'mt fsf 2' from the beginning of the tape (or 'mt
fsf 1' after 'mt rewind; mt fsf 1' to seek past /) takes more than an
hour, and I get a timeout after precisely one hour (give or take five
seconds). What I get is the usual "timed out while idle", followed by
a "Power on, reset, or bus device reset occurred", followed by the
tape rewinding (much faster than it can wind forward)... This seems
consistent with the code (saspace() in sys/cam/scsi/scsi_sa.c calls
scsi_space with a timeout of 60*60*1000 ms)
I thought of winding the tape forward "manually" bit by bit (by doing
'mt fsr xxx') but I can't seem to find the right count. If I rewind
the tape and do 'mt fsr 1000' followed by 'mt fsf 1', I get to /home
as expected. I have a log of the dump, so I know the size of each
section, but how many blocks are in a record? What count should I use
to wind the tape forward ~2100000 blocks? (of course I intended to do
it in several smaller steps so that none of the individual steps took
more than an hour).
Of course, I can hack my kernel to use a longer timeout, but I'd like
to know the answer to those questions all the same...
OBTW, I browsed through some of the CAM code while researching this
and I have to hand it to you guys, it's such *beautiful* code... :)
DES
--
Dag-Erling Smørgrav - dag-erli@ifi.uio.no
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-scsi" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?xzphfxs767m.fsf>
