Hi, I configured my disk layout according to http://wiki.freebsd.org/RootOnZFS/ZFSBootPartition But I swapped the order of the freebsd-zfs and freebsd-swap. The 4.0G freebsd-swap partition appears first inside the slice. After that, I write zfsboot on both ada0s2 and ada0s2b, but the boot0 gives me a "Read error". What should do? Thanks. -- Zhihao Yuan, nickname lichray The best way to predict the future is to invent it. ___________________________________________________ 4BSD -- http://4bsd.biz/
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 On 06/15/11 17:42, Zhihao Yuan wrote:> Hi, > > I configured my disk layout according to > http://wiki.freebsd.org/RootOnZFS/ZFSBootPartition > > But I swapped the order of the freebsd-zfs and freebsd-swap. The 4.0G > freebsd-swap partition appears first inside the slice. > After that, I write zfsboot on both ada0s2 and ada0s2b, but the boot0 > gives me a "Read error".Where did your second slice start? There can be a lot of reasons why it gives Read error. I personally recommend using GPT scheme instead of MBR, as you have a dedicated partition for gptzfsboot, which is much cleaner than this approach. Cheers, - -- Xin LI <delphij@delphij.net> http://www.delphij.net/ FreeBSD - The Power to Serve! Live free or die -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.17 (FreeBSD) iQEcBAEBCAAGBQJN+VUrAAoJEATO+BI/yjfBpksH/2ZswQ+ogdDpYwvhRIjJaqLs NEl8FtC2Ua+c3F2sNwrLK5a/fn/LL+jPAXndvuQdxOaz41Iqtnt8w1i9Dz5ATkva T+i0fnRVwXFqjrlRTWK+ODtNtrhI2/7ECAIfOOLNhaiJnPRrJJgvxJ6V5W+/N+l7 Lt4yMp6hGbhO/9Yp2UoaQuUThOTz+dKNZGECd1nLT+ooHbTPhBvjii080hHowNl6 Ef+JBaEng2NbRJPxYWrRwz6R7A44RDXvrKzn5w/TuUa+4fYrS25EZxygzIh3xjFX 2ILP25yabJ+Vw5o8bFCsJ3ExbEfq0PnfROHanRSdTjMDra27dGY9JZKyytE+Ykc=D5+X -----END PGP SIGNATURE-----
On Wed, Jun 15, 2011 at 7:58 PM, Xin LI <delphij@delphij.net> wrote:> -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA256 > > On 06/15/11 17:42, Zhihao Yuan wrote: >> Hi, >> >> I configured my disk layout according to >> http://wiki.freebsd.org/RootOnZFS/ZFSBootPartition >> >> But I swapped the order of the freebsd-zfs and freebsd-swap. The 4.0G >> freebsd-swap partition appears first inside the slice. >> After that, I write zfsboot on both ada0s2 and ada0s2b, but the boot0 >> gives me a "Read error". > > Where did your second slice start? ?There can be a lot of reasons why it > gives Read error.After an NTFS partition of 12GB. This should be the problem with zfsboot, because if I use sysinstall to install a bootmgr, the boot gives me a "not UFS" error, which means the boot0 is done (am I right?).> > I personally recommend using GPT scheme instead of MBR, as you have a > dedicated partition for gptzfsboot, which is much cleaner than this > approach. >Yeah, yeah, I agree. I should not plan to play Windows games.> Cheers, > - -- > Xin LI <delphij@delphij.net> ? ?http://www.delphij.net/ > FreeBSD - The Power to Serve! ? ? ? ? ?Live free or die > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v2.0.17 (FreeBSD) > > iQEcBAEBCAAGBQJN+VUrAAoJEATO+BI/yjfBpksH/2ZswQ+ogdDpYwvhRIjJaqLs > NEl8FtC2Ua+c3F2sNwrLK5a/fn/LL+jPAXndvuQdxOaz41Iqtnt8w1i9Dz5ATkva > T+i0fnRVwXFqjrlRTWK+ODtNtrhI2/7ECAIfOOLNhaiJnPRrJJgvxJ6V5W+/N+l7 > Lt4yMp6hGbhO/9Yp2UoaQuUThOTz+dKNZGECd1nLT+ooHbTPhBvjii080hHowNl6 > Ef+JBaEng2NbRJPxYWrRwz6R7A44RDXvrKzn5w/TuUa+4fYrS25EZxygzIh3xjFX > 2ILP25yabJ+Vw5o8bFCsJ3ExbEfq0PnfROHanRSdTjMDra27dGY9JZKyytE+Ykc> =D5+X > -----END PGP SIGNATURE----- > _______________________________________________ > freebsd-stable@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-stable > To unsubscribe, send any mail to "freebsd-stable-unsubscribe@freebsd.org" >-- Zhihao Yuan, nickname lichray The best way to predict the future is to invent it. ___________________________________________________ 4BSD -- http://4bsd.biz/
I just redo everything, and changed the order of freebsd-zfs and freebsd-swap. The "Read error" still happens! On Wed, Jun 15, 2011 at 8:07 PM, Zhihao Yuan <lichray@gmail.com> wrote:> On Wed, Jun 15, 2011 at 7:58 PM, Xin LI <delphij@delphij.net> wrote: >> -----BEGIN PGP SIGNED MESSAGE----- >> Hash: SHA256 >> >> On 06/15/11 17:42, Zhihao Yuan wrote: >>> Hi, >>> >>> I configured my disk layout according to >>> http://wiki.freebsd.org/RootOnZFS/ZFSBootPartition >>> >>> But I swapped the order of the freebsd-zfs and freebsd-swap. The 4.0G >>> freebsd-swap partition appears first inside the slice. >>> After that, I write zfsboot on both ada0s2 and ada0s2b, but the boot0 >>> gives me a "Read error". >> >> Where did your second slice start? ?There can be a lot of reasons why it >> gives Read error. > > After an NTFS partition of 12GB. > This should be the problem with zfsboot, because if I use sysinstall > to install a bootmgr, the boot gives me a "not UFS" error, which means > the boot0 is done (am I right?). > >> >> I personally recommend using GPT scheme instead of MBR, as you have a >> dedicated partition for gptzfsboot, which is much cleaner than this >> approach. >> > > Yeah, yeah, I agree. I should not plan to play Windows games. > >> Cheers, >> - -- >> Xin LI <delphij@delphij.net> ? ?http://www.delphij.net/ >> FreeBSD - The Power to Serve! ? ? ? ? ?Live free or die >> -----BEGIN PGP SIGNATURE----- >> Version: GnuPG v2.0.17 (FreeBSD) >> >> iQEcBAEBCAAGBQJN+VUrAAoJEATO+BI/yjfBpksH/2ZswQ+ogdDpYwvhRIjJaqLs >> NEl8FtC2Ua+c3F2sNwrLK5a/fn/LL+jPAXndvuQdxOaz41Iqtnt8w1i9Dz5ATkva >> T+i0fnRVwXFqjrlRTWK+ODtNtrhI2/7ECAIfOOLNhaiJnPRrJJgvxJ6V5W+/N+l7 >> Lt4yMp6hGbhO/9Yp2UoaQuUThOTz+dKNZGECd1nLT+ooHbTPhBvjii080hHowNl6 >> Ef+JBaEng2NbRJPxYWrRwz6R7A44RDXvrKzn5w/TuUa+4fYrS25EZxygzIh3xjFX >> 2ILP25yabJ+Vw5o8bFCsJ3ExbEfq0PnfROHanRSdTjMDra27dGY9JZKyytE+Ykc>> =D5+X >> -----END PGP SIGNATURE----- >> _______________________________________________ >> freebsd-stable@freebsd.org mailing list >> http://lists.freebsd.org/mailman/listinfo/freebsd-stable >> To unsubscribe, send any mail to "freebsd-stable-unsubscribe@freebsd.org" >> > > > > -- > Zhihao Yuan, nickname lichray > The best way to predict the future is to invent it. > ___________________________________________________ > 4BSD -- http://4bsd.biz/ >-- Zhihao Yuan, nickname lichray The best way to predict the future is to invent it. ___________________________________________________ 4BSD -- http://4bsd.biz/
I wish I can get a binary version... Because I have no working FreeBSD box now.... On Thu, Jun 16, 2011 at 12:35 PM, John Baldwin <jhb@freebsd.org> wrote:> On Thursday, June 16, 2011 8:45:41 am Zhihao Yuan wrote: >> Exactly. The MFCed ZFSv28 is different from any patch maintained by >> mm@. Maybe some untested changes involved. > > Can you try reverting this change: > > Author: jhb > Date: Thu Apr 28 17:44:24 2011 > New Revision: 221177 > URL: http://svn.freebsd.org/changeset/base/221177 > > Log: > ?Due to space constraints, the UFS boot2 and boot1 use an evil hack where > ?boot2 calls back into boot1 to perform disk reads. ?The ZFS MBR boot blocks > ?do not have the same space constraints, so remove this hack for ZFS. > ?While here, remove commented out code to support C/H/S addressing from > ?zfsldr. ?The ZFS and GPT bootstraps always just use EDD LBA addressing. > > ?MFC after: ? ?2 weeks > > Modified: > ?head/sys/boot/i386/boot2/Makefile > ?head/sys/boot/i386/common/drv.c > ?head/sys/boot/i386/zfsboot/Makefile > ?head/sys/boot/i386/zfsboot/zfsldr.S > > -- > John Baldwin >-- Zhihao Yuan, nickname lichray The best way to predict the future is to invent it. ___________________________________________________ 4BSD -- http://4bsd.biz/
Henri Hennebert
2011-Jun-16 19:18 UTC
ZFS boot inside on the second partition inside a slice
On 06/16/2011 19:35, John Baldwin wrote:> On Thursday, June 16, 2011 8:45:41 am Zhihao Yuan wrote: >> Exactly. The MFCed ZFSv28 is different from any patch maintained by >> mm@. Maybe some untested changes involved. > > Can you try reverting this change: > > Author: jhb > Date: Thu Apr 28 17:44:24 2011 > New Revision: 221177 > URL: http://svn.freebsd.org/changeset/base/221177 > > Log: > Due to space constraints, the UFS boot2 and boot1 use an evil hack where > boot2 calls back into boot1 to perform disk reads. The ZFS MBR boot blocks > do not have the same space constraints, so remove this hack for ZFS. > While here, remove commented out code to support C/H/S addressing from > zfsldr. The ZFS and GPT bootstraps always just use EDD LBA addressing. > > MFC after: 2 weeks > > Modified: > head/sys/boot/i386/boot2/Makefile > head/sys/boot/i386/common/drv.c > head/sys/boot/i386/zfsboot/Makefile > head/sys/boot/i386/zfsboot/zfsldr.S >I will try this saturday! Thanks Henri
Henri Hennebert
2011-Jun-22 11:34 UTC
ZFS boot inside on the second partition inside a slice
On 06/21/2011 23:27, John Baldwin wrote:> On Tuesday, June 21, 2011 4:13:20 pm Henri Hennebert wrote: >> On 06/21/2011 21:25, John Baldwin wrote: >> and I get: >> >> Read error: 04 > > Hmm, that is the error for an invalid sector. Try this patch. It reshuffles > a few more things and adds code to dump the low 32-bits of the LBA on an > error: > > Index: zfsldr.S > ==================================================================> --- zfsldr.S (revision 223365) > +++ zfsldr.S (working copy) > @@ -16,7 +16,6 @@ > */ > > /* Memory Locations */ > - .set MEM_REL,0x700 # Relocation address > .set MEM_ARG,0x900 # Arguments > .set MEM_ORG,0x7c00 # Origin > .set MEM_BUF,0x8000 # Load area > @@ -91,26 +90,18 @@ main: cld # String ops inc > mov %cx,%ss # Set up > mov $start,%sp # stack > /* > - * Relocate ourself to MEM_REL. Since %cx == 0, the inc %ch sets > - * %cx == 0x100. > - */ > - mov %sp,%si # Source > - mov $MEM_REL,%di # Destination > - incb %ch # Word count > - rep # Copy > - movsw # code > -/* > * If we are on a hard drive, then load the MBR and look for the first > * FreeBSD slice. We use the fake partition entry below that points to > * the MBR when we call nread. The first pass looks for the first active > * FreeBSD slice. The second pass looks for the first non-active FreeBSD > * slice if the first one fails. > */ > - mov $part4,%si # Partition > + mov $part4,%si # Dummy partition > cmpb $0x80,%dl # Hard drive? > jb main.4 # No > - movb $0x1,%dh # Block count > - callw nread # Read MBR > + xor %eax,%eax # Read MBR > + movw $MEM_BUF,%bx # from first > + callw nread # sector > mov $0x1,%cx # Two passes > main.1: mov $MEM_BUF+PRT_OFF,%si # Partition table > movb $0x1,%dh # Partition > @@ -161,10 +152,16 @@ main.4: xor %dx,%dx # Partition:drive > * area and target area do not overlap. > */ > main.5: mov %dx,MEM_ARG # Save args > - movb $NSECT,%dh # Sector count > + mov $NSECT,%cx # Sector count > movl $1024,%eax # Offset to boot2 > - callw nread.1 # Read disk > -main.6: mov $MEM_BUF,%si # BTX (before reloc) > + mov $MEM_BUF,%bx # Destination buffer > +main.6: pushal # Save params > + callw nread # Read disk > + popal # Restore > + incl %eax # Update for > + add $SIZ_SEC,%bx # next sector > + loop main.6 # If not last, read another > + mov $MEM_BUF,%si # BTX (before reloc) > mov 0xa(%si),%bx # Get BTX length and set > mov $NSECT*SIZ_SEC-1,%di # Size of load area (less one) > mov %di,%si # End of load > @@ -214,29 +211,35 @@ seta20.3: sti # Enable interrupts > * packet on the stack and passes it to read. > * > * %eax - int - LBA to read in relative to partition start > + * %es:%bx - ptr - destination address > * %dl - byte - drive to read from > - * %dh - byte - num sectors to read > * %si - ptr - MBR partition entry > */ > -nread: xor %eax,%eax # Sector offset in partition > -nread.1: xor %ecx,%ecx # Get > +nread: xor %ecx,%ecx # Get > addl 0x8(%si),%eax # LBA > adc $0,%ecx > pushl %ecx # Starting absolute block > pushl %eax # block number > push %es # Address of > - push $MEM_BUF # transfer buffer > - xor %ax,%ax # Number of > - movb %dh,%al # blocks to > - push %ax # transfer > + push %bx # transfer buffer > + push $0x1 # Read 1 sector > push $0x10 # Size of packet > mov %sp,%bp # Packet pointer > callw read # Read from disk > lea 0x10(%bp),%sp # Clear stack > - jnc return # If success, return > - mov $msg_read,%si # Otherwise, set the error > - # message and fall through to > - # the error routine > + jc nread.1 # If error, fail > + ret # If success, return > +nread.1: mov %ah,%al # Format > + mov $read_err,%di # error > + call hex8 # code > + movl 0x4(%si),%eax # Format > + mov $lba,%di # LBA > + call hex32 > + mov $msg_lba,%si # Display > + call putstr # LBA > + mov $msg_read,%si # Set the error message and > + # fall through to the error > + # routine > /* > * Print out the error message pointed to by %ds:(%si) followed > * by a prompt, wait for a keypress, and then reboot the machine. > @@ -259,14 +262,6 @@ putstr: lodsb # Get char > jne putstr.0 # No > > /* > - * Overused return code. ereturn is used to return an error from the > - * read function. Since we assume putstr succeeds, we (ab)use the > - * same code when we return from putstr. > - */ > -ereturn: movb $0x1,%ah # Invalid > - stc # argument > -return: retw # To caller > -/* > * Reads sectors from the disk. If EDD is enabled, then check if it is > * installed and use it if it is. If it is not installed or not enabled, then > * fall back to using CHS. Since we use a LBA, if we are using CHS, we have to > @@ -294,14 +289,38 @@ read: cmpb $0x80,%dl # Hard drive? > retw # To caller > read.1: mov $msg_chs,%si > jmp error > -msg_chs: .asciz "CHS not supported" > > +/* > + * Convert EAX, AX, or AL to hex, saving the result to [EDI]. > + */ > +hex32: pushl %eax # Save > + shrl $0x10,%eax # Do upper > + call hex16 # 16 > + popl %eax # Restore > +hex16: call hex16.1 # Do upper 8 > +hex16.1: xchgb %ah,%al # Save/restore > +hex8: push %ax # Save > + shrb $0x4,%al # Do upper > + call hex8.1 # 4 > + pop %ax # Restore > +hex8.1: andb $0xf,%al # Get lower 4 > + cmpb $0xa,%al # Convert > + sbbb $0x69,%al # to hex > + das # digit > + orb $0x20,%al # To lower case > + stosb # Save char > + ret # (Recursive) > + > /* Messages */ > > -msg_read: .asciz "Read" > -msg_part: .asciz "Boot" > +msg_chs: .asciz "CHS not supported" > +msg_read: .ascii "Read error: " > +read_err: .asciz "XX" > +msg_lba: .ascii "LBA: " > +lba: .asciz "XXXXXXXX\r\n" > +msg_part: .asciz "Boot error" > > -prompt: .asciz " error\r\n" > +prompt: .asciz "\r\n" > > .org PRT_OFF,0x90 > >I get LBA: 00008200 Read error: 04 mfsbsd# gpart show => 63 312581745 ad0 MBR (149G) 63 167782797 1 ntfs (80G) 167782860 144798948 2 freebsd [active] (69G) => 0 144798948 ad0s2 BSD (69G) 0 144798948 1 freebsd-zfs (69G)