Date: Fri, 2 Mar 2007 13:25:06 -0800 From: Jeremy Chadwick <koitsu@FreeBSD.org> To: Steven Hartland <killing@multiplay.co.uk> Cc: freebsd-hackers@freebsd.org, freebsd-stable@freebsd.org Subject: Re: sysinstall creates corrupt filesystems after repartitioning Message-ID: <20070302212506.GA9990@icarus.home.lan> In-Reply-To: <017901c75cec$4a20f6a0$b3db87d4@multiplay.co.uk> References: <00cb01c75c5b$4205e390$b3db87d4@multiplay.co.uk> <45E82660.4030107@freebsd.org> <008101c75cd1$42a4df10$b3db87d4@multiplay.co.uk> <45E830A8.8020104@freebsd.org> <20070302144409.GA4431@icarus.home.lan> <00eb01c75ce0$b0430380$b3db87d4@multiplay.co.uk> <20070302162042.GA6019@icarus.home.lan> <017901c75cec$4a20f6a0$b3db87d4@multiplay.co.uk>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Mar 02, 2007 at 05:00:24PM -0000, Steven Hartland wrote: > No problem if you have the resources / time to test this now > thats great. > > Here's the steps I used, if you have any questions just shout: > 1. Boot a normal 6.2 install Done. Booted CD image #1, did a standard install, chose Minimal as the installation type. Also chose to install the FreeBSD boot manager and the like. > 2. dump /usr to remote location Done. From the machine going to act as an NFS server, I did: icarus# ssh -c blowfish root@192.168.1.193 "/sbin/dump -0 -f- /usr" | dd of=usr.dump bs=65536 DUMP: WARNING: should use -L when dumping live read-write filesystems! DUMP: Date of this level 0 dump: Fri Mar 2 12:49:29 2007 DUMP: Date of last level 0 dump: the epoch DUMP: Dumping /dev/ad0s1f (/usr) to standard output DUMP: mapping (Pass I) [regular files] DUMP: mapping (Pass II) [directories] DUMP: estimated 106124 tape blocks. DUMP: dumping (Pass III) [directories] DUMP: dumping (Pass IV) [regular files] DUMP: DUMP: 110621 tape blocks DUMP: finished in 35 seconds, throughput 3160 KBytes/sec DUMP: DUMP IS DONE 1+13937 records in 1+13937 records out 113274880 bytes transferred in 18.691292 secs (6060302 bytes/sec) icarus# ls -l usr.dump -rw-r--r-- 1 root wheel 113274880 Mar 2 12:55 usr.dump > 3. restore said dump to a empty directory on the remote machine Done: icarus# restore -x -f usr.dump You have not read any tapes yet. If you are extracting just a few files, start with the last volume and work towards the first; restore can quickly skip tapes that have no further files to extract. Otherwise, begin with volume 1. Specify next volume #: 1 set owner/mode for '.'? [yn] n icarus# ls -l total 110750 drwxrwxr-x 2 root operator 512 Mar 2 04:40 .snap drwxr-xr-x 2 root wheel 7168 Mar 2 04:40 bin drwxr-xr-x 2 root wheel 512 Mar 2 04:40 compat drwxr-xr-x 2 root wheel 512 Mar 2 04:40 games drwxr-xr-x 47 root wheel 4608 Mar 2 04:40 include drwxr-xr-x 4 root wheel 7168 Mar 2 04:40 lib drwxr-xr-x 5 root wheel 512 Mar 2 04:40 libdata drwxr-xr-x 5 root wheel 1536 Mar 2 04:40 libexec drwxr-xr-x 2 root wheel 512 Jan 11 23:38 local drwxr-xr-x 2 root wheel 512 Mar 2 04:40 obj drwxr-xr-x 2 root wheel 5120 Mar 2 04:40 sbin drwxr-xr-x 27 root wheel 512 Mar 2 04:40 share drwxr-xr-x 2 root wheel 512 Jan 11 23:38 src -rw-r--r-- 1 root wheel 113274880 Mar 2 12:55 usr.dump icarus# ls -ld . drwxr-xr-x 15 root wheel 512 Mar 2 12:58 . > 4. share this directory over nfs to the test machine Done. You know the routine to get NFS to work... ;) My exports: /storage -alldirs -maproot=root -network 192.168.1.0 -mask 255.255.255.0 Verified to be working on test box via: mount -t nfs icarus.home.lan:/storage/nfs /mnt ls -l /mnt umount /mnt Worked OK. > 5. edit /etc/fstab to use the nfs /usr instead of the ufs /usr Done. The test box's /etc/fstab now contains: icarus.home.lan:/storage/nfs /usr nfs rw 0 0 # old /usr, local to filesystem # /dev/ad0s1f /usr nfs rw 2 2 > 6. reboot Done. Rebooted test box. Box came up with an NFS mounted /usr: # df -k Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 507630 36838 430182 8% / devfs 1 1 0 100% /dev /dev/ad0s1e 507630 12 467008 0% /tmp /dev/ad0s1d 1506190 234 1385462 0% /var icarus.home.lan:/storage/nfs 473015558 120242684 314931630 28% /usr > 7. Enable mbr changes on live fs: sysctl kern.geom.debugflags=16 Done. # sysctl kern.geom.debugflags=16 kern.geom.debugflags: 0 -> 16 > 8. run sysinstall > 8.1 delete /dev/(da|ad)0s1f ( the /usr partition ) Done. Prior to deletion: ad0s1f <none> 4645MB * > 8.2 create a smaller /usr in the space cleared > 8.3 create /data with the remaining space Done: ad0s1f /usr 3072MB UFS2+S Y ad0s1g /data 1573MB UFS2+S Y > 8.4 Write the changes Done. However, there were errors: ......................... Message ......................... .Unable to add /dev/ad0s1b as a swap device: Device busy . ..................................................(100%)... . [ OK ] . .................[ Press enter or space ].................. ............................. Message ............................. .Error mounting /dev/ad0s1g on /data : No such file or directory . ..........................................................(100%)... . [ OK ] . .....................[ Press enter or space ]...................... > 9. quit sysinstall Done. Did a df -k just before step 10, just to be sure: # df -k Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 507630 36840 430180 8% / devfs 1 1 0 100% /dev /dev/ad0s1e 507630 12 467008 0% /tmp /dev/ad0s1d 1506190 234 1385462 0% /var icarus.home.lan:/storage/nfs 473015558 120242684 314931630 28% /usr /dev/ad0s1f 4603338 4 4235068 0% /usr > 10. umount -f /usr ( to restore the nfs version ) I did this via umount -f /dev/ad0s1f instead of umount /usr, since I wasn't sure if the NFS mount /usr would get removed or the local filesystem /usr: # umount -f /dev/ad0s1f # df -k Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 507630 36840 430180 8% / devfs 1 1 0 100% /dev /dev/ad0s1e 507630 12 467008 0% /tmp /dev/ad0s1d 1506190 234 1385462 0% /var icarus.home.lan:/storage/nfs 473015558 120242684 314931630 28% /usr > 11. umount /data Can't, because it didn't get created. > 12. fsck /dev/(da|ad)0s1(f|g) both will be corrupt. Doesn't appear to happen for me: # fsck /dev/ad0s1f ** /dev/ad0s1f ** Last Mounted on /usr ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 2 files, 2 used, 2301667 free (27 frags, 287705 blocks, 0.0% fragmentation) Is there something I'm missing? -- | Jeremy Chadwick jdc at parodius.com | | Parodius Networking http://www.parodius.com/ | | UNIX Systems Administrator Mountain View, CA, USA | | Making life hard for others since 1977. PGP: 4BD6C0CB |
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070302212506.GA9990>