Skocz do zawartości

Fdisk - Partycja O Dokładnym Rozmiarze W Bajtach


mkozak

Rekomendowane odpowiedzi

Czesc,

 

Mam taki task:

 

Potrzebuję utworzyć partycję o idealnie takim samym rozmiarze jak partycja na innym kompie.

 

Jak stworzyć partycję mającą idealnie 125882107648 bajtów??

 

Próbowałem w Fdysku podać:

Początkowy cylinder 1

Końcowy cylinder +125882107648

 

ale chyba się nie zrozumieliśmy mimo, że ja wół napisane jest że możesz podać:

end cylider or +size or +sizeM

 

To ja rozumiem +size jako +ilość bajtów, am I right or wrong (or read or write xD)

 

Jeżeli ktoś ma pomysł jak utworzyć taką partycję to proszę o radę.

Odnośnik do komentarza
Udostępnij na innych stronach

Spisz sobie z kompa źródłowego ile ma cylindrów ta partycja. Jak podasz te same numerki na docelowym, będzie idealnie taka sama.

 

Nie jestem specem od dysków, czy jakiś tam parametrów, albo standardół, więc zapytam bo nie wiem:

 

Czy każdy dysk ma taką samą wielkość cylinra - czy to jest rozmiarowo wartość stała dla wszystkich urządzeń??

 

Czy przypadkiem nie może się tak zdażyć, że mam w jednej maszynie macierz z dyskami scsi i raidem 5, a potrzebuję odtworzyć ten stan na dystku SATA 400 GB i rozbierzność jest taka, że nie da rady?

 

Czy można jakoś wymusić inny rozmiar cylindra?

Odnośnik do komentarza
Udostępnij na innych stronach

W sprawie "+size" to jest to niestety "+ilość cylindrów" chociaż logicznie patrząc ("+sizeK", "+sizeM") niewątpliwie masz rację ;)

@Arabski - taka jest teoria. W praktyce zawsze gdy robię partycję na jednym dysku podają np. cylindry 1-2000 i dokladnie to samo na drugim dysku to obie partycje po utworzeniu na nich filesystemu nieznacznie się różnią - o kilka, kilkadziesiąt kB. Nie mam pojecia dlaczego tak jest, ale jest to powtarzalne.

 

Co do drugiej części pytania to też nie za bardzo znam się na budowie dysków, ale nie sądzę, żeby to miało znaczenie przy przenoszeniu danych za pomocą kopiowania z jednego dysku na drugi czy przenoszenia danych za pośrednictwem napędów optycznych czy tasiemek. Wyjątek może stanowić wykorzystanie polecenia dd, ale ono wykonuje obraz (kopię) surowego dysku a nie kopię danych z filesystemu.

 

Odnośnik do komentarza
Udostępnij na innych stronach

No i z tego co rozpoznałem, to rzeczywiście - rozmiary są różne około 8 MB, albo około 4MB

 

Tylko jeżeli mam że jeden cylinder ma 4177920 bajtów i biorę 125 822 107 648 / 4 177 920 = 30 115.9686

 

Wpisuję w fdiska +30116 to mi wychodzi 122877360 bajtów

 

Gdzie ja błąd robię w obliczeniach ??

 

Albo ja źle patrzę - jak dodaje w fdisku partycję to robię np +125822107K

potem tworzę ext3, montuję i wywułuję df - tam mam 123852900K

 

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli ten dysk używa głównie linuksa to nie będzie problemu, tylko musisz dać sobie spokój z cylindrami i zapisać poprawnie początek i ilość sektorów. W tablicy przy każdej partycji są 2 informacje które powinny być zgodne - CHS początku i końca partycji oraz offset i rozmiar w sektorach. Na szczęście pingwin pracując patrzy tylko na sektory. Co najwyżej fdisk weryfikuje czy chs i sektory są ok, ale to tylko sprawdzenie nadmiarowe, a jak są niezgodne, to pingwin za bardzo się tym nie martwi

 

Jest to zadanie delikatne, ale można to zrobić używając dd i mcedit:

 

* przepisujesz do pliku tablicę partycji z dysku źródłowego

dd if=/dev/sd_from of=mbr_from bs=512 count=1

* przepisujesz do pliku tablicę partycji z dysku docelowego

dd if=/dev/sd_to of=mbr_to bs=512 count=1

* czytasz szesnastkowo bajty

mcedit -v mbr_from

* wciskasz F4, masz widok szesnastkowy

* potem szukasz 16 bajtów opisujących daną partycję, opisane są w wikipedii

http://pl.wikipedia.org/wiki/Master_Boot_Record

http://en.wikipedia.org/wiki/Master_Boot_Record

 

i przepisujesz 4 bajty rozmiaru LBA do pliku mbr_to (oczywiście zapisując na kartce co było wcześniej)

Oczywiście tak poprawiasz jedną z 4 partycji podstawowych i za tą partycją powinno być wolne miejsce

 

* i na końcu zapisujesz MBR na dysk

dd if=mbr_to of=/dev/sd_to bs=512 count=1

 

 

np moje sdb3 widziane programem cfdisk:

---Starting--- ----Ending---- Start Number of

# Flags Head Sect Cyl ID Head Sect Cyl Sector Sectors

-- ----- ---- ---- ---- ---- ---- ---- ---- ----------- -----------

1 0x80 1 1 0 0x83 254 63 1023 63 233263737

2 0x00 0 0 0 0x00 0 0 0 0 0

3 0x00 254 63 1023 0x82 254 63 1023 233263800 1172745

4 0x00 0 0 0 0x00 0 0 0 0 0

 

o rozmiarze 1172745 sektorów to szesnastkowo 0011E509 (kalkulator z hexem jest w fedorce)

na pozycji 0001EA w MBR są 4 bajty: 09 E5 11 00, wystarczy je zmienić na inną wartość i już partycja ma inny rozmiar co do sektora

 

 

powodzenia

 

 

 

 

 

 

 

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

@Arabski - taka jest teoria. W praktyce zawsze gdy robię partycję na jednym dysku podają np. cylindry 1-2000 i dokladnie to samo na drugim dysku to obie partycje po utworzeniu na nich filesystemu nieznacznie się różnią - o kilka, kilkadziesiąt kB. Nie mam pojecia dlaczego tak jest, ale jest to powtarzalne.

 

Możliwe, że chodzi o "zaokrąglanie do cylindra", ale sobacz sam - bardzo różne dyski, a numerki te same:

 

[root@nodezero ~]# fdisk -l | grep Disk
Disk /dev/hda: 400.0 GB, 400088457216 bytes
Disk /dev/hdb: 750.1 GB, 750156374016 bytes
Disk /dev/hdc: 120.0 GB, 120034123776 bytes
Disk /dev/sda: 4293 MB, 4293632000 bytes
[root@nodezero ~]# fdisk -l | grep Unit
Units = cylinders of 16065 * 512 = 8225280 bytes
Units = cylinders of 16065 * 512 = 8225280 bytes
Units = cylinders of 16065 * 512 = 8225280 bytes
Units = cylinders of 16065 * 512 = 8225280 bytes

 

"Przekładałem" kiedyś system z dysku 9GB na 4GB i pierwsze trzy partycje (Pri) poszły z dd, ale Extended już się pokrzaczyła. Założyłem od nowa, założyłem brakujące partycje (co do cylindra) a potem kopiowałem dd. Działa do tej pory, nic się nie zgubiło, fsck nie wrzeszczy. Całkiem możliwe, że nie było problemów, bo różnica w objętości dysków była mała. Ale szczerze mówiąc, to nie wiem czy to ma coś wspólnego...

Odnośnik do komentarza
Udostępnij na innych stronach

Możliwe, że chodzi o "zaokrąglanie do cylindra"
Możliwe. Mówiłem, że się nie znam a jedynie wyciągam wnioski praktyczne z moich doświadczeń.

[...] a potem kopiowałem dd. Działa do tej pory, nic się nie zgubiło, fsck nie wrzeszczy. Całkiem możliwe, że nie było problemów, bo różnica w objętości dysków była mała.
Zapewne właśnie o te małą różnice objętości chodzi :) Mały test. Załóż partycję np. 50 i 100MB (malutkie, żeby za długo nie trwało) a potem skopiuj partycje 50 MB na tę 100MB przy pomocy dd. Ponieważ dd kopiuje wszystko "jak leci", to system po wykonaniu kopii będzie wykazywał, że masz 50MB zamiast 100MB. Operacja zakończy się sukcesem tylko gdy docelowa partycja będzie >= partycji źródłowej.

Jak ktoś ciekawy a nie chce mu się bawić, to u mnie test przebiegł mniej więcej tak (zrobiłem dwie partycje testowe na /dev/sdb):

##### TEST 1 - mniejsza na większą
[root@vmware ~]# df -k
System plików      bl.  1K B        użyte dostępne %uż. zamont. na
/dev/sda3              7523992   5348940   1786684  75% /
/dev/sda1               101086     17542     78325  19% /boot
tmpfs                   109372         0    109372   0% /dev/shm
/dev/sdb1                48569      4910     41151  11% /mnt/sdb1
/dev/sdb2                95195      5667     84613   7% /mnt/sdb2
[root@vmware ~]# umount /dev/sdb1
[root@vmware ~]# umount /dev/sdb2
[root@vmware ~]# dd if=/dev/sdb1 of=/dev/sdb2
100320+0 przeczytanych recordów
100320+0 zapisanych recordów
skopiowane 51363840 bajtów (51 MB), 28,0636 s, 1,8 MB/s
[root@vmware ~]# fdisk /dev/sdb

Command (m for help): q

[root@vmware ~]# fdisk -l /dev/sdb 

Disk /dev/sdb: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk identifier: 0x2966a4f4

  Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          49       50160   83  Linux
/dev/sdb2              50         145       98304   83  Linux
[root@vmware ~]# mount /dev/sdb1 /mnt/sdb1
[root@vmware ~]# mount /dev/sdb2 /mnt/sdb2
[root@vmware ~]# df
System plików      bl.  1K B        użyte dostępne %uż. zamont. na
/dev/sda3              7523992   5348940   1786684  75% /
/dev/sda1               101086     17542     78325  19% /boot
tmpfs                   109372         0    109372   0% /dev/shm
/dev/sdb1                48569      4910     41151  11% /mnt/sdb1
/dev/sdb2                48569      4910     41151  11% /mnt/sdb2


##### TEST 2 - większa na mniejszą (wcześniej utworzyłem partycje identyczne jak w teście 1.)
[root@vmware ~]# df -k
System plików bl. 1K B użyte dostępne %uż. zamont. na
/dev/sda3 7523992 5348940 1786684 75% /
/dev/sda1 101086 17542 78325 19% /boot
tmpfs 109372 0 109372 0% /dev/shm
/dev/sdb1 48569 4910 41151 11% /mnt/sdb1
/dev/sdb2 95195 5667 84613 7% /mnt/sdb2
[root@vmware ~]# umount /dev/sdb1
[root@vmware ~]# umount /dev/sdb2
[root@vmware ~]# dd if=/dev/sdb2 of=/dev/sdb1
dd: zapis do `/dev/sdb1': Brak miejsca na urządzeniu
100321+0 przeczytanych recordów
100320+0 zapisanych recordów
skopiowane 51363840 bajtów (51 MB), 22,2336 s, 2,3 MB/s

Zwróćcie uwagę na wynik polecenia df przed i po operacji dd w teście 1.

Odnośnik do komentarza
Udostępnij na innych stronach

Załóż partycję np. 50 i 100MB (malutkie, żeby za długo nie trwało) a potem skopiuj partycje 50 MB na tę 100MB przy pomocy dd. Ponieważ dd kopiuje wszystko "jak leci", to system po wykonaniu kopii będzie wykazywał, że masz 50MB zamiast 100MB. Operacja zakończy się sukcesem tylko gdy docelowa partycja będzie >= partycji źródłowej.

 

To tak, zgadza się. Tylko mnie chodziło o inną sytuację. Był sobie dysk 9GB. Z pamięci układ wyglądał tak:

 

/boot (Pri) 16M

swap (Pri) 250M

/ (Pri) 300M

(Ext)

/usr 1000M

/var 1000M

--jeszcze jakieś-

/temp - reszta dysku - ponad 5GB

 

Ten dysk, w całości (dd if=/dev/sda of=/dev/sdb) poszedł przez dd na dysk 4GB. "W całości" ponieważ oczywiście reszta się nie zmieściła. To właśnie było to pokrzaczenie Extended, o którym pisałem - wszystkie partycje rozszerzone, łącznie z samą Extended musiały iść w diabły, bo numerki w MBR po prostu się nie zgadzały. Ale jako że ostatnia partycja była na tyle duża, że pozostałe zmieściły się na 4GB bez kombinacji, założyłem od nowa Extended, na niej rozszerzone (co do cylindra!) i kopiowałem już "po partycji" czyli

 

dd if=/dev/sda5 of=/dev/sdb5

itd...

 

Uff, zale zagmatwałem. Ma to jakiś sens? :D

Odnośnik do komentarza
Udostępnij na innych stronach

Ma to jakiś sens? :D
No chyba rozumiem. Nigdy nie robiłem kopii dysku w całości. Zazwyczaj przed zainstalowaniem nowej wersji robię sobie backup pełnych partycji "/" i "/boot" ("/home" mam osobno) przez dd tworząc wcześniej dwie partycje o odpowiednich wielkościach i w razie jak mi coś pójdzie nie tak z nową instalką, to bez problemów, nawet nie mieszając w /etc/fstab, zmieniając lekko wpisy w grub.conf odpalam stary system bezpośrednio z kopii.

Teraz ja mieszam :) ale musiałbym to narysować, żeby dokładnie pokazać co i jak.

 

Odnośnik do komentarza
Udostępnij na innych stronach

Teraz ja mieszam ale musiałbym to narysować, żeby dokładnie pokazać co i jak.

 

Spoko, nic nie mieszasz. Wiem o co chodzi :)

 

A wracając do cylindrów i całej reszty:

 

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Selected partition 4
First cylinder (601-1115, default 601):
Using default value 601
Last cylinder or +size or +sizeM or +sizeK (601-1115, default 1115): 800

Command (m for help): p

Disk /dev/sdd: 9173 MB, 9173114880 bytes
255 heads, 63 sectors/track, 1115 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1         200     1606468+  83  Linux
/dev/sdd2             201         400     1606500   83  Linux
/dev/sdd3             401         600     1606500   83  Linux
/dev/sdd4             601         800     1606500   83  Linux

 

Plus przy ilości bloków oznacza zaokrąglenie. Za manualem:

 

Whenever a partition table is printed out, a consistency check is performed on the partition table entries. This check verifies that

the physical and logical start and end points are identical, and that the partition starts and ends on a cylinder boundary (except

for the first partition).

 

Czyli pierwsza się "nie mieści" i zostaje zaokrąglona, pozostałe są zakładane dokładnie do cylindra. To zapewne jest źródłem nieścisłości. A co do +size, to jest to jednak rozmiar w bajtach, ale tego polecam unikać bo wtedy nie da się uciec od "zaokrąglania".

 

Kolega cracket proponuje hardcore zupełny :D , ja sądzę jednak, że da się to zrobić przy pomocy narzędzi wyższego poziomu.

 

Wracając do pierwszego posta:

 

Jak stworzyć partycję mającą idealnie 125882107648 bajtów??

 

Skoro rozmiar jednostki wynosi (na moich dyskach) 8225280, to z dzielenia wychodzą ułamki : 15304.29 czyli coś musi być zaokrąglone. Pomocne byłoby, gdybyś był w stanie podać wynik fdisk -l z dysku źródłowego. Rozumiem, że mowa o "surowej" partycji bez narzutu FS.

 

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...