рдлреНрд░реАрдмреАрдПрд╕рдбреА рдмрдирд╛рдо рдЧреНрд░рдм

рд╢реБрдн рджреЛрдкрд╣рд░ рдпрд╣ рд▓реЗрдЦ GRUB рдХреЗ рдЦрд┐рд▓рд╛рдл рдореЗрд░реЗ рдирд┐рдЬреА рд╕рдВрдШрд░реНрд╖ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреИрд╕реЗ рджреЗрдЦрдирд╛ рд╣реИред
рдЧреНрд░рдм-рд▓реЛрдбрд░ рдХреЛ рдлреНрд░реАрдмреЗрд╕ рдкрд░ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЪреЗрдирд▓реЛрдбрд░ + 1 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдзрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рдереАред


рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рддреЛ, рд╣реЙрд░реНрдирдмреАрдо рд░рдЦреЛ (рдкрд╣рд▓рд╛, рджреВрд╕рд░рд╛ рдореБрдЭреЗ рдмрд╣реБрдд рд░рд╛рдХреНрд╖рд╕реА рд▓рдЧ рд░рд╣рд╛ рдерд╛):
# cd /usr/ports/sysutils/grub && make install
рдЕрдм рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдмреВрдЯрд▓реЛрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
# grub-install /dev/ad8
рдпрд╣реАрдВ рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЪрд▓реА рдЧрдИрдВред рд╡рд╣ рд╣рдореЗрдВ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╕рдорд╛рдЪрд╛рд░ рдмрддрд╛рддрд╛ рд╣реИ - "рдлрд╝рд╛рдЗрд▓ / рдмреВрдЯ / рдЧреНрд░рдм / рд╕реНрдЯреЗрдЬ 1 рд╕рд╣реА рд╕реЗ рдирд╣реАрдВ рдкрдврд╝рд╛ рдЧрдпрд╛ред"
рдРрд╕рд╛ рдХреИрд╕реЗ? рдореИрдВрдиреЗ рдЦреБрдж рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рджреЗрдЦрд╛ рдЬрдм рдореИрдВрдиреЗ рдЬрд╛рдБрдЪ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЙрд░реНрдирдмреАрдо рд╕реНрдерд╛рдкрд┐рдд рд╣реИред
рдареАрдХ рд╣реИ, рдореИрдВ рд▓реЙрдЧ рджреЗрдЦреВрдВрдЧрд╛:
# cat /tmp/grub-install.log.XXXXX
grub> dump (hd2,0,a)/boot/grub/stage1 /tmp/grub-install.img.XXXXX

Error 22: No such partition
grub> quit


рддреНрд░реБрдЯрд┐ рдореБрдЭреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрддрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрднрд╛рдЧ рд╕реНрд╡рдпрдВ рд╣реИред Google рдиреЗ рдорджрдж рдирд╣реАрдВ рдХреА, рдПрдХреНрд╕ 3 рдореЗрдВ рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рдХреЗ рдЗрдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рдмрдЧ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ ufs рд╣реИрдВ, рдФрд░ рд╡рд╣рд╛рдВ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ 128 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдЦреЛрджрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдХреЛрдб рдбрд┐рдЬрд╛рдЗрди рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред

рддреНрд░реБрдЯрд┐ реиреи


рд╣рдо рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдЕрдзреНрдпрдпрди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╕рд░рд▓ рд╣реИ - ERR_NO_PART , рдлрд┐рд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреБрдЫ рдПрдирд╛рд▓реЙрдЧ рдЗрд░рдиреЛ рдХреЛ рдЧреНрд░реБрдмреЗ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛рдиреА рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдВрддрд┐рдо рддреНрд░реБрдЯрд┐ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ)ред
рдХреЗрд╡рд▓ 2 рдРрд╕реЗ рд╕реНрдерд╛рди рд╣реИрдВ, рдФрд░ рд╡реЗ 2 рдкрдбрд╝реЛрд╕реА рд▓рдВрдмреЛ рдХрд╛рд░реНрдпреЛрдВ (рд╣реИрд▓реЛ рдЬреАрд╕реАрд╕реА!) Next_bsd_partition () рдФрд░ next_pc_slice () рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ, рдирд╛рдо рд╕реЗ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рджреВрд╕рд░реА рд╕реВрдЪреА bs рд╕реНрд▓рд╛рдЗрд╕, рдкрд╣рд▓реЗ рдЗрди рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рдЦрдВрдбреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рддреБрд░рдВрдд рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЧреНрд░рдм рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХрд╛рд░рдг - рдмрд╣реБрдд, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдмрд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╣реИрдВ рдФрд░ рд▓рдЧрднрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ gdb рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рдПрдХ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдкрд░ рд╣реБрдЖ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА xxgdb рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд░рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЪреБрдирд╛ - рд╣рдо рдкреНрд░рд┐рдВрдЯрдлрд╝реНрд╕ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдореБрдЭреЗ рднреА рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рд╣реБрдИрдВ:



рдореИрдВ рдПрдХ рддреЗрдЬ рдЬрд╛рдВрдЪ рдЪрд╛рд╣рддрд╛ рдерд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рд╣рд░ рдмрд╛рд░ рд╣реЙрд░реНрдирдмреАрдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рди рдЬрд╛рдПрдВ рдФрд░ 2 рд▓рд╛рдЗрдиреЗрдВ рдЯрд╛рдЗрдк рди рдХрд░реЗрдВред рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЧреНрд░рдм-рдЗрди рд╢реЗрд▓ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ):
./grub/grub --batch < cmd
рдЬрд╣рд╛рдБ cmd рдореЗрдВ рдХрдорд╛рдВрдб рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ:
dump (hd2,0,a)/boot/grub/stage1 test_img
quit


рдХрд╛рд░реНрдпрд╕реНрдерд▓ рддреИрдпрд╛рд░ рд╣реИ, рд╣рдо "рдбрд┐рдмрдЧрд┐рдВрдЧ" рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЙрди рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкреНрд░рд┐рдВрдЯрдлрд╝ () рдбрд╛рд▓реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╕реНрддрд░ рдХреА рдареЛрдХрд░ рдЦрд╛рддреЗ рд╣реИрдВред
рд╣рдо рд╡рд░реНрдЧреЛрдВ рдкрд░ рд▓рдбрд╝рдЦрдбрд╝рд╛рдП рд╣реБрдП рд╣реИрдВ, рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдБ рдРрд╕рд╛ рдЪрдХреНрд░ рд╣реИ:
  /* Search next valid BSD partition. */ for (i = bsd_part_no + 1; i < BSD_LABEL_NPARTS (buf); i++) { if (BSD_PART_TYPE (buf, i)) { /* Note that *TYPE and *PARTITION were set for current PC slice. */ *type = (BSD_PART_TYPE (buf, i) << 8) | (*type & 0xFF); *start = BSD_PART_START (buf, i); *len = BSD_PART_LENGTH (buf, i); *partition = (*partition & 0xFF00FF) | (i << 8); #ifndef STAGE1_5 /* XXX */ if ((drive & 0x80) && BSD_LABEL_DTYPE (buf) == DTYPE_SCSI) bsd_evil_hack = 4; #endif /* ! STAGE1_5 */ return 1; } } 

рд╡реИрд╕реЗ, рдЖрдк рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд┐рддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯреИрдм рдФрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрдбреЗрдВрдЯ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, 2 рдЯреИрдм, 4 рд░рд┐рдХреНрдд рд╕реНрдерд╛рдиред рдХреНрдпрд╛ рд╕рдВрдкрд╛рджрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдкрд╕рдВрдж" рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ред
рдпрджрд┐ BSD_PART_TYPE (buf, i) рд╕реНрдерд┐рддрд┐ рдиреЗ рдХрднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрд░рдХреНрд╖рдХ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдП рд╣реИрдВред

 #define BSD_PART_TYPE(l_ptr, part) \ ( *( (unsigned char *) (((int) l_ptr) + BSD_PART_OFFSET + 12 \ + (part << 4)) ) ) 

рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ "рдмрд╣реБрдд" рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдбреЙред рд╕реАрдкреАрдЬреЗ рдХреЛрдпрдореНрд╕ рдХреА рдмреВрдЯрд┐рдВрдЧ, рд╡рд┐рднрд╛рдЬрди рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЬрд╛рдирд╛ рдкрдбрд╝рд╛ред
рд╕реНрд▓рд╛рдЗрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╡рд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдЦрдВрдб рдХреЗ рд╡рд┐рд╡рд░рдг рдмреНрд▓реЙрдХ рд╕реЗ рдСрдлрд╕реЗрдЯ 12 рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рдкреНрд░рдХрд╛рд░ рдлрд╝реАрд▓реНрдб рдирд┐рд╣рд┐рдд рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдпрд╣ 0 рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдерд┐рддрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
рд╣рдо рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ - bsdlabel / dev / ad8s1 , рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рдпрд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдкреНрд░рдпреБрдХреНрдд рд╣реИ ред рдареАрдХ рд╣реИ, рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдЪреАрдЬрд╝ рдХреЛ рдареАрдХ рдХрд░реЗрдВ - bsdlavel -e / dev / ad8s1 ред рд▓реЗрдХрд┐рди рд╡рд╣ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ - "рд╡рд░реНрдЧ рдирд╣реАрдВ рдорд┐рд▓рд╛"ред
рдмреЗрд╢рдХ, рд╣реЙрд░реНрдирдмреАрдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдЭрдВрдбрд╛ ( sysctl kern.geom.debugflags = 16 ) рд╕реЗрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕реЗ Google рдХрд░реЗрдВ, рдпрд╣ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдпрд╣ рд╕рдирдХреА рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ 17 рд╕реЗрдЯ рдХрд░реЗрдВ, рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ - рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИред

Bsdlabel рдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рдереА, рдЗрд╕рд▓рд┐рдП ktrace bsdlabel -e / dev / ad8s1 рдХрд░рдирд╛ рдЖрд╕рд╛рди рдерд╛, рдлрд┐рд░ kdump | рдЕрдзрд┐рдХ ред
74340 bsdlabel CALL open(0x28201030,O_RDWR,[unused]0xbfbfe9e8)
74340 bsdlabel NAMI "/dev/ad8s1"
74340 bsdlabel RET open -1 errno 1 Operation not permitted
74340 bsdlabel CALL open(0x28097653,O_RDONLY,[unused]0x28050629)
74340 bsdlabel NAMI "/dev/geom.ctl"
74340 bsdlabel RET open 3
74340 bsdlabel CALL ioctl(0x3,GEOM_CTL,0x28203040)
74340 bsdlabel RET ioctl 0

"рдСрдкрд░реЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ", рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ bsdlabel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдордХреНрдЦреА рдкрд░ рд╕рд┐рд╕реНрдЯрдо рдбреНрд░рд╛рдЗрд╡ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрддрд┐ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рд╣реИ - рдЧрд╛рд░реНрдЯрд░ рд╣реИ:
gpart modify -i 1 -t freebsd-ufs /dev/ad8s1
рдЗрдВрдбреЗрдХреНрд╕ 1, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд░реНрдХ 'рд╕реЗрдХреНрд╢рди' рдХреЛ рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВред / dev / ad8s1, not / dev / ad8, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕реНрд▓рд╛рдЗрд╕ рдЯреЗрдмрд▓ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдордмреАрдЖрд░) рдХрд╛ рд╕рдВрдкрд╛рджрди рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╕реНрд▓рд╛рдЗрд╕ рд╣реА рд╣реИред
Bsdlabel'om рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ - рд╕рдлрд▓рддрд╛ред рдЕрдкрдиреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд╣реЙрд░реНрдирдмреАрдо рдЗрд╕ рдкрд░ рдХреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдЧрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡реНрдпрдХреНрдд рдХреА, рд▓реЗрдХрд┐рди рдЕрдВрдд рддрдХ рдирд╣реАрдВред рддреНрд░реБрдЯрд┐ 22 рдХреЛ рдПрдХ рдирдП рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рддреНрд░реБрдЯрд┐ 17: рдЪрдпрдирд┐рдд рд╡рд┐рднрд╛рдЬрди рдХреЛ рдорд╛рдЙрдВрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ ред

рддреНрд░реБрдЯрд┐ рез 17


рдирд╛рдо рд╕реЗ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдмрдврд╝рддреЗ ufs рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдмрд╣реБрдд рдЖрд▓рд╕реА рдирд╣реАрдВ рд╣реИрдВ рдФрд░ ufs2_mount () рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд┐рдВрдЯрдлрд╝ рдбрд╛рд▓рддреЗ рд╣реИрдВ ред
рддреЛ рдпрд╣ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╛рд░рдг рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдпрд╣ рд╕реБрдкрд░рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдЦреЛрдЬ рд╕рдХрддрд╛ред рдпрд╣ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдлрдПрд╕ (рдиреЛрдбреНрд╕ рдХрд╛ рдЖрдХрд╛рд░, рдХреНрд▓рд╕реНрдЯрд░, рдЭрдВрдбреЗ рдХрд╛ рдЖрдХрд╛рд░, рдФрд░ рдЗрд╕реА рддрд░рд╣) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред
рдПрдлрдПрд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдПрдХ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛, рдпрд╣ ufs2 рдореЗрдВ рднреА рд╣реИ, рд▓реЗрдХрд┐рди рдЧреНрд░рдм рдЗрд╕реЗ рдирд╣реАрдВ рдвреВрдВрдврддрд╛ рд╣реИред рдЖрдЗрдП рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ "рдХрд╣рд╛рдБ рдмреИрдарддреА рд╣реИ" - рдбрдВрдкрдлрд╝реНрд╕ / | рд╣реЗрдб -2 рдРрд╕реА рд▓рд╛рдЗрди "рд╕реБрдкрд░рдмреНрд▓реЙрдХ рд▓реЛрдХреЗрд╢рди 65536" рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ ред
рд╣рдо рдЧреНрд░рдм рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ:
 #define SBLOCK_FLOPPY 0 #define SBLOCK_UFS1 8192 #define SBLOCK_UFS2 65536 #define SBLOCK_PIGGY 262144 #define SBLOCKSIZE 8192 #define SBLOCKSEARCH \ { SBLOCK_UFS2, SBLOCK_UFS1, SBLOCK_FLOPPY, SBLOCK_PIGGY, -1 } 

рд╣рдо рдкреЛрд╖рд┐рдд рд╕рдВрдЦреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЦреЛрдЬрддреЗ?
65536 рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдПрдХ рдСрдлрд╕реЗрдЯ рд╣реИ, рдЗрд╕реЗ рдХреНрдпрд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рд╕рд╛рде рд▓рд┐рдпрд╛:
dd if=/dev/ad8 bs=512 count=200 | hexdump -C | grep 54
рд╣рдордиреЗ рдкрд╣рд▓реЗ 200 рд╕реЗрдХреНрдЯрд░реНрд╕ рдкрдврд╝реЗ (рдпрд╣ рд╕реЗрдХреНрд╢рди 16 рд╕реЗрдХреНрдЯрд░реНрд╕, 128 (рд╕реБрдкрд░рдмреНрд▓реЙрдХ рдСрдлрд╝рд╕реЗрдЯ) + 16 (рдЕрдзрд┐рдХрддрдо рд░реЗрдлрд░реЗрдВрд╕ рдкреЙрдЗрдВрдЯ) + 16 (рд╕реБрдкрд░рдмреНрд▓реЙрдХ рд╕рд╛рдЗрдЬрд╝) <200, рдмреИрдХрд▓реИрд╢ рдлреЙрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖред
grep 54 - рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдмрд╛рдЗрдЯ 0x54 рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реБрдкрд░рдмреНрд▓реЙрдХ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рд╣реИ, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдХреБрд▓ рдЖрдХрд╛рд░ 4 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред
#define FS_UFS2_MAGIC 0x19540119 /* UFS2 fast filesystem magic number */
рд▓реЗрдХрд┐рди рддреБрд░рдВрдд dwords рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЦреЛрдЬ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рджрд░реНрдЬрди рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ 2 рдмрд╛рд░, 69 рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд┐рд▓рд╛, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдбрдВрдк рдкрд░ рдХрд░реАрдм рд╕реЗ рдзреНрдпрд╛рди рджрд┐рдпрд╛, рдЖрдЧреЗ FS_UFS1_MAGIC рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд▓реЛрдбрд░ рдХреЛрдб рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдФрд░ рд╕реБрдкрд░рдмреНрд▓реЙрдХ рд╣реА рдирд╣реАрдВред

рддрдм рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЕрдиреБрднрд╛рдЧ рдХреЗ рдЕрдВрджрд░ рджреЗрдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ:
dd if=/dev/ad8s1a bs=512 count=200 | hexdump -C | grep 54
рдФрд░ рдпрд╣рд╛рдБ рд╕рдлрд▓рддрд╛ рдореЗрд░рд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реА рдереА - рдСрдлрд╕реЗрдЯ 0x10550 (66896) рдкрд░ рд╣рдо рдЕрдкрдирд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреЗрдЦрддреЗ рд╣реИрдВред
рдСрдлрд╕реЗрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 65536 рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реБрдкрд░рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ "рдбреЗрд▓реНрдЯрд╛" ( FIELD_OFFSET () ) рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ 8192 рд╕реЗ рдХрдо рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реБрдкрд░рдмреНрд▓реЙрдХ рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдареАрдХ рдЙрд╕ рдЦрдВрдб рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдСрдлрд╕реЗрдЯ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдСрдлрд╕реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ n рд╕реЗрдХреНрдЯрд░реЛрдВ рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЬреНрдЮрд╛рдд рдЦреЛрдЬ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред
рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ - 0001a350 (107344), рдЬреЛ 209 рд╡реЗрдВ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдЕрдиреБрдорд╛рди рдХрд╛рдлреА рд╣рдж рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛ рдерд╛ред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реБрдЖ рдХрд┐ рдореИрдВ рдЦреБрдж рд╕реНрд▓рд╛рдЗрд╕ рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЧрдпрд╛ (63), 63 + 16 + 128 == 207,
рдФрд░ 2 рд╕реЗрдХреНрдЯрд░ рд╕реБрдкрд░рдмреНрд▓реЙрдХ рдХреЗ рд╢реЗрд╖ рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВред
рд▓рдХреНрд╖реНрдп рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрдгрдирд╛ рднрдпрд╛рд╡рд╣ (рд╕реЗрдХреНрдЯрд░, рдмрд╛рдЗрдЯ_рдСрдлрд╝рд╕реЗрдЯ) рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ:
sector + (byte_offset >> SECTOR_BITS) + part_start
рдЪрд░ рдХреНрд╖реЗрддреНрд░ рдФрд░ рдмрд╛рдЗрдЯ_рдСрдлрд╝рд╕реЗрдЯ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрд░рдорд╢рдГ 0 рдФрд░ 65536 рдХреЗ рдмрд░рд╛рдмрд░ рддрд░реНрдХ рд╣реИрдВ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИред рд▓реЗрдХрд┐рди part_start 16 рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рднреА рд╕рдЪ рд╣реИред рд▓реЗрдХрд┐рди рд╣реЙрд░реНрдирдмреАрдо рдЗрд╕реЗ рдПрдХ рдирд┐рд░рдкреЗрдХреНрд╖ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реИ, рдЬреЛ рдбрд┐рд╕реНрдХ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИ, рди рдХрд┐ рд╕реНрд▓рд╛рдЗрд╕ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд░реВрдк рдореЗрдВред
рдореИрдирд╛ " рд╕реЗрдХреНрдЯрд░реЛрдВ рдореЗрдВ рдбреНрд░рд╛рдЗрд╡ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рд╡рд┐рднрд╛рдЬрди рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдСрдлрд╕реЗрдЯ " рдХрд╣рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдпрд╣ рдХрд╣рддреА рд╣реИ рдХрд┐ " рдкрд╣рд▓рд╛ рд╡рд┐рднрд╛рдЬрди рдСрдлрд╕реЗрдЯ 16 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП "ред
рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рдм рдХреБрдЫ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдШреБрдбрд╝рд╕рд╡рд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдЧ рд╣реЙрд░реНрдирдмреАрдо рдореЗрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдг рдЬреЛрдбрд╝рдХрд░ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ:
*start += BSD_PART_START (buf, i);
рдФрд░ рдЕрдм рд╕рдм рдХреБрдЫ рд╕рдлрд▓ рд╣реИ - part_start = 0x4F , рдФрд░ рдбрдВрдк рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реИред
рд╣рдо рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рд╣реЙрд░реНрдирдмреАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдореЗрд░рд╛ рдлрд┐рдХреНрд╕ рд╕реНрдЯреЗрдЬ 1_5 / рд╕реНрдЯреЗрдЬ 2 рдореЗрдВ рднреА рдкреНрд░рд╡реЗрд╢ рдХрд░ рдЬрд╛рдП ред
grub_install рд╕рд╣реА рдирд┐рдХрд▓рд╛ , рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред

рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рд╕реАрдорд╛ рдкрдврд╝реЗрдВ


рдереЛрдбрд╝рд╛ рд╕рд╛ рд╡рд┐рд╖рдп, рд▓реЗрдХрд┐рди ufs, grub'a рдФрд░ fryakha рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рддрд╛ рд╣реИред
рдЕрдзрд┐рдХрддрдо рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ grub рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:
(12 + superblock.nindir) * superblock.bsize

рд╕реБрдкрд░рдмреНрд▓реЙрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдбрдВрдкрдлреЙрдЬ рд▓реЙрдЧ рд╕реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВред
рдореБрдЭреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ ~ 32 рдореАрдЯрд░ рдорд┐рд▓рд╛, рдЬреЛ рдореБрдЭреЗ рдмрд╣реБрдд рднрд╛рддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХреЛрдб рд╕реЗ рдЪреЗрдХ рдХрд╛рдЯ рджрд┐рдпрд╛ред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд▓рд╛рдЗрди рдкрд░ fsys_ufs2.c рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ:
fsmax = (NDADDR + NINDIR (SUPERBLOCK)) * SUPERBLOCK->fs_bsize;


рджреГрдврд╝рддрд╛рдкреВрд░реНрд╡рдХ


рдпрд╣рд╛рдБ рдПрдХ рдЫреЛрдЯреА рд╕реА рдХрд╣рд╛рдиреА рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рд╕рдирдХреА рдкрд░ рдХреИрд╕реЗ рднрд╛рдЧрд╛ред
рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ:

Source: https://habr.com/ru/post/In118894/


All Articles