IMPORTANT: Les noves versions d'Ubuntu (TODO: A partir de quan?) utilitzant el sistema de particions GPT. Tingueu en compte a l'hora de recuperar dades d'aquests discos ja que utilitzant eines tradicionals com fdisk les particions no es detectaran i us pot semblar que teniu un disc buit sense particions!. Consulteu GPT i parted
Segons el manual:
$ man fdisk
fdisk - Partition table manipulator for Linux
fdisk és l'eina de línia l'ordres que tenim per manipular particions en sistemes Linux. També existeixen altres aplicacions gràfiques com gparted.
NOTA: fdisk només suporta sistemes de particions x86 (sembla que també suporta BSD/SUN i IRIX/SGI???)
El nom ve de fixed disk i el nom és el mateix que la utilitat de Windows i DOS FDISK. Totes dues eines són eines de línia d'ordres i que serveixen per al mateix però el funcionament és força diferent.
El paquet que proporciona fdisk a distribucions de la familia Debian és util-linux:
$ whereis fdisk fdisk: /sbin/fdisk /usr/share/man/man8/fdisk.8.gz $ dpkg -S /sbin/fdisk util-linux: /sbin/fdisk
Aquest paquet proporciona infinitat de d'aplicacions bàsiques com. Les podeu conèixer amb:
$ dpkg -L util-linux | grep bin /bin /bin/dmesg /bin/more /bin/tailf /sbin /sbin/mkfs /sbin/mkswap /sbin/fsck.minix /sbin/mkfs.minix /sbin/mkfs.bfs /sbin/blockdev /sbin/raw /sbin/fsck.cramfs /sbin/mkfs.cramfs /sbin/fdisk /sbin/sfdisk /sbin/cfdisk /sbin/blkid /sbin/findfs /sbin/ctrlaltdel /sbin/pivot_root /sbin/switch_root /sbin/hwclock /sbin/isosize /sbin/getty /sbin/fsck /usr/bin /usr/bin/getopt /usr/bin/addpart /usr/bin/ddate /usr/bin/delpart /usr/bin/mcookie /usr/bin/namei /usr/bin/partx /usr/bin/whereis /usr/bin/rename.ul /usr/bin/setterm /usr/bin/chkdupexe /usr/bin/chrt /usr/bin/ionice /usr/bin/taskset /usr/bin/flock /usr/bin/ipcrm /usr/bin/ipcs /usr/bin/ipcmk /usr/bin/setsid /usr/bin/setarch /usr/bin/lscpu /usr/bin/rev /usr/bin/line /usr/bin/pg /usr/sbin /usr/sbin/fdformat /usr/sbin/cytune /usr/sbin/readprofile /usr/sbin/ldattach /usr/sbin/tunelp /usr/sbin/rtcwake /usr/sbin/rdev /usr/bin/i386 /usr/bin/linux64 /usr/bin/linux32 /usr/sbin/ramsize /usr/sbin/vidmode /usr/sbin/rootflags
El paquet també és util-linux:
> whereis fdisk fdisk: /sbin/fdisk /usr/share/man/man8/fdisk.8.gz > rpm -qf /sbin/fdisk util-linux-2.14.1-10.2.1
El podeu instal·lar amb zypper:
$ sudo zypper install util-linux
Fdisk permet gestionar i consultar les particions d'un disk. Podem consultar tots els discs del sistema i particions amb
$ sudo fdisk -l Disc /dev/sda: 203.9 GB, 203928109056 octets 255 heads, 63 sectors/track, 24792 cylinders Units = cilindres of 16065 * 512 = 8225280 bytes Disk identifier: 0x35e635e6 Dispositiu Arrenc. Inici Final Blocs Id Sistema /dev/sda1 * 1 4178 33559753+ c W95 FAT32 (LBA) /dev/sda2 4179 6728 20482875 83 Linux /dev/sda3 6729 24792 145099080 5 Estesa /dev/sda5 6729 10552 30716248+ 83 Linux /dev/sda6 10553 24537 112334481 83 Linux /dev/sda7 24538 24792 2048256 82 Intercanvi Linux / Solaris Disc /dev/sdb: 160.0 GB, 160041885696 octets 255 heads, 63 sectors/track, 19457 cylinders Units = cilindres of 16065 * 512 = 8225280 bytes Disk identifier: 0x460972ee Dispositiu Arrenc. Inici Final Blocs Id Sistema /dev/sdb1 1 19457 156288321 83 Linux
La sortida té dos parts diferenciades (separades per un espai), una per cada disc dur (/dev/sda i /dev/sdb). Per a cada dispositiu, inicialment trobem un bloc de dades relatives al dispositiu. Per exemple:
Disc /dev/sdb: 160.0 GB, 160041885696 octets 255 heads, 63 sectors/track, 19457 cylinders Units = cilindres of 16065 * 512 = 8225280 bytes Disk identifier: 0x460972ee
Aquí podeu veure:
La següent secció són les particions del disc. Per exemple:
Dispositiu Arrenc. Inici Final Blocs Id Sistema /dev/sda1 * 1 4178 33559753+ c W95 FAT32 (LBA) /dev/sda2 4179 6728 20482875 83 Linux
Vegem que hi ha dos particions primàries (/dev/sda1 i /dev/sda2). La primera esta marcada com a partició d'arrancada amb el simbol * (només útil per a DOS). De cada partició ens indiquen el principi i el final en cilindres.
IMPORTANT: Si apareix un símbol més al final de la mida en blocs, ens indica que la partició no coincideix amb els límits dels cilindres. Al particionar indicant múltiples de mides com GB o MB, sovint s'arrodoneix i no s'ocupa tot l'espai que podria ocupar la partició
NOTA: la mida en blocs és la mida en blocs del sistema operatiu Linux, normalment 1024. També es pot obtenir amb sfdisk -s /dev/dispositiu
També us mostra l'identificador del tipus de partició i el sistema de fitxers utilitzat.
Es pot canviar les unitats a sectors amb l'opció -u:
$ sudo fdisk -lu /dev/sda Disc /dev/sda: 120.0 GB, 120034123776 octets 255 heads, 63 sectors/track, 14593 cylinders, total 234441648 sectors Units = sectors of 1 * 512 = 512 bytes Disk identifier: 0xa0000000 Dispositiu Arrenc. Inici Final Blocs Id Sistema /dev/sda1 * 63 224829674 112414806 83 Linux /dev/sda2 224829675 234436544 4803435 5 Estesa /dev/sda5 224829738 234436544 4803403+ 82 Intercanvi Linux / Solaris
I aleshores sabeu que el disc té:
En comptes de fdisk podeu utilitzar sfdisk per tal d'obtenir informació més completa.
$ sudo sfdisk -l /dev/sda Disc /dev/sda: 14593 cilindres, 255 capçals, 63 sectors/pista Unitats = cilindres de 8225280 octets, blocs de 1024 octets, contant des de 0 Disp. Arr. Inici Final #cil. #blocs Id Sistema /dev/sda1 * 0+ 13994 13995- 112414806 83 Linux /dev/sda2 13995 14592 598 4803435 5 Estesa /dev/sda3 0 - 0 0 0 Buida /dev/sda4 0 - 0 0 0 Buida /dev/sda5 13995+ 14592 598- 4803403+ 82 Intercanvi Linux / Solaris
Podem consultar una disc dur concret amb :
$ sudo fdisk -l /dev/sda
Hi ha força confusió amb el concepte bloc i la mida del bloc. El problema es degut a que existeixen 4 tipus de blocs diferents i les seves mides corresponents:
NOTA: el sistema operatiu utilitza l'ordre/crida de sistema stat per obtenir el st_blksize per tal de calcular la mida d'un fitxer
Depén de l'entors. Les següents variables d'entorn determinen les mides de bloc
IMPORTANT: Lo normal és que cap de les variables d'entorn anteriors estiguin configurades, Aleshores la mida de bloc és 1024 bytes per a comandes com du i df i de 1 byte per a ls
Recursos
Si no tenim clar les mides que ens mostren les diferents ordres del sistema a Linux es pot fer molt difícil saber la mida real que ocupa un fitxer.
Cal tenir en compte que
Cal tenir en compte que independentment dels continguts i la mida del que ocupa un fitxer, al existir una mida mínima de bloc del sistema de fitxers, els fitxer sovint ocupen més espai de disc del que realment necessiten. A més hi ha força altres factors a tenir en compte com la fragmentació (tan la interna com la externa), els forats (sparse-files), blocs indirectes del sistema de fitxers ext3, etc...
Així, per exemple, la imatge:
$ ls -l /home/sergi/Documents/imatges/CreativeCommons.png -rw-r--r-- 1 sergi sergi 90648 2009-11-15 10:20 /home/sergi/Documents/imatges/CreativeCommons.png
segons ls ocupa 90648 blocs. En canvi segons du ocupa 96K:
$ du -h /home/sergi/Documents/imatges/CreativeCommons.png 96K /home/sergi/Documents/imatges/CreativeCommons.png
L'ordre ls té l'opció -s (--size) que mostra la mida del fitxer segons l'espai que ocupa en disc:
$ ls -s /home/sergi/Documents/imatges/CreativeCommons.png 96 /home/sergi/Documents/imatges/CreativeCommons.png
Podem mostra la mida en K (kylobytes=1024 bytes):
$ ls -sh /home/sergi/Documents/imatges/CreativeCommons.png 96K /home/sergi/Documents/imatges/CreativeCommons.png
L'ordre du mostra la mida en blocs de disc. Si indiquem que la mida d'un bloc és 1 (1 byte) tenim:
$ du -h --block-size=1 /home/sergi/Documents/imatges/CreativeCommons.png 98304 /home/sergi/Documents/imatges/CreativeCommons.png
Que equival a:
96*1024=98304
És a dir la mida de bloc de du és 1024, que és la mida de bloc de la cache del nucli de Linux (equival a dos sectors de disc).
Cal tenir en compte que l'ordre du també pot mostra la mida real (també anomenada mida aparent):
$ du --apparent-size /home/sergi/Documents/imatges/CreativeCommons.png 89 /home/sergi/Documents/imatges/CreativeCommons.png
Però:
89*1024=91136 que és diferent de 90648!
NOTA: la mida aparent sol ser més petita, però també pot ser més gran i no hi ha una formula per calcular la diferència ja que depen de factors com la defragmentació, el sistema de fitxers, etc...
De fet l'opció -b, és equivalent a:
--apparent-size --block-size=1
és a dir mostrar la "mida real" i en bytes:
$ du -b /home/sergi/Documents/imatges/CreativeCommons.png 90648 /home/sergi/Documents/imatges/CreativeCommons.png
que com podeu veure és la mida que mostrava ls.
Per calcular el perquè de la diferència entra la mida que ocupa el fitxer a disc i la seva mida real, necessitem conèixer quina és la mida de bloc del sistema de fitxers. Com que el fitxer està en un sistema de fitxers ext3, podem consultar la mida de bloc amb:
$ sudo dumpe2fs /dev/sda1 | grep -i "block size" dumpe2fs 1.41.9 (22-Aug-2009) Block size: 4096
És a dir la mida de bloc del sistema de fitxers ext3 és 4K (és la mida habitual).
90648 bytes / 4096 bytes/bloc= 22,13....
És a dir no tenim prou amb 22 blocs, en necessitem 23.
23*4096= 94208
Recursos
$ dd if=/dev/zero of=sparse-file bs=1 count=0 seek=5M 0+0 registres llegits 0+0 registres escrits 0 octets (0 B) copiats, 4,2953e-05 s, 0,0 kB/s $ ls -l sparse-file -rw-r--r-- 1 sergi sergi 5242880 2009-11-21 18:51 sparse-file $ du -h sparse-file 0 sparse-file
Recursos:
L'ordre stat:
$ stat /home/sergi/Documents/imatges/CreativeCommons.png File: «/home/sergi/Documents/imatges/CreativeCommons.png» Size: 90648 Blocks: 192 IO Block: 4096 fitxer ordinari Device: 801h/2049d Inode: 4334933 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ sergi) Gid: ( 1000/ sergi) Access: 2009-11-18 15:43:07.000000000 +0100 Modify: 2009-11-15 10:20:36.000000000 +0100 Change: 2009-11-15 10:20:36.000000000 +0100
En aquest cas block és un sector de disc (512 bytes--> 192*512=98304).
NOTA: A més cal tenir en compte que hi ha fitxers molts especials com els sparse-files
Vegeu també:
L'ordre fdisk us permet conèixer la geometria del disc. Vegem un exemple en una màquina de 2 discs:
$ sudo fdisk -l Disc /dev/sda: 203.9 GB, 203928109056 octets 255 heads, 63 sectors/track, 24792 cylinders Units = cilindres of 16065 * 512 = 8225280 bytes Disk identifier: 0x0001b3e6 Dispositiu Arrenc. Inici Final Blocs Id Sistema /dev/sda1 * 1 24419 196145586 83 Linux /dev/sda2 24420 24792 2996122+ 5 Estesa /dev/sda5 24420 24792 2996091 82 Intercanvi Linux / Solaris Disc /dev/sdb: 250.1 GB, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Units = cilindres of 16065 * 512 = 8225280 bytes Disk identifier: 0x2fe02fdf Dispositiu Arrenc. Inici Final Blocs Id Sistema /dev/sdb1 * 1 4080 32772568+ c W95 FAT32 (LBA) /dev/sdb2 4081 25810 174546225 f W95 Estesa (LBA) /dev/sdb3 25811 29890 32772600 83 Linux /dev/sdb4 29891 30401 4104607+ 82 Intercanvi Linux / Solaris /dev/sdb5 4081 25810 174546193+ 83 Linux
Com podeu veure la majoria de discs durs tenen una quantitat fixa de 255 capçals i el que diferencia dos discs durs és la seva mida en cilindres (o sectors). De fet si observeu fdisk no us dona la mida en bytes de cada partició sinó que us la dona en nombre de cilindres:
/dev/sdb1 * 1 4080 32772568+ c W95 FAT32 (LBA) /dev/sdb2 4081 25810 174546225 f W95 Estesa (LBA) /dev/sdb3 25811 29890 32772600 83 Linux /dev/sdb4 29891 30401 4104607+ 82 Intercanvi Linux / Solaris /dev/sdb5 4081 25810 174546193+ 83 Linux
Cada partició comença i acaba en un cilindre. Per calcular la mida d'una partició heu de saber la mida d'un cilindre. De fet us la proporciona fdisk:
Units = cilindres of 16065 * 512 = 8225280 bytes. És a dir cada cilindre són uns 8.22528MB o uns 7.84423MiB
Cal tenir en compte que 16065 és el número de sectors per cilindre (número de sectors per pista x nombre de capçals).
Si voleu fdisk us pot mostrar les mides en sectors en compte de cilindres, utilitzant l'opció -u
$ sudo fdisk -lu ... Disc /dev/sdb: 250.1 GB, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors Units = sectors of 1 * 512 = 512 bytes Disk identifier: 0x2fe02fdf Dispositiu Arrenc. Inici Final Blocs Id Sistema /dev/sdb1 * 63 65545199 32772568+ c W95 FAT32 (LBA) /dev/sdb2 65545200 414637649 174546225 f W95 Estesa (LBA) /dev/sdb3 414637650 480182849 32772600 83 Linux /dev/sdb4 480182850 488392064 4104607+ 82 Intercanvi Linux / Solaris /dev/sdb5 65545263 414637649 174546193+ 83 Linux
Cal que observeu que la primera pista (sectors de 0 a 63) està reservada per a dades del disc, concretament conté el MBR al primer sector (512 bytes) i la resta de bytes de la primera pista corresponent al que s'anomena la zona de compatibilitat de DOS.
La mida habitual d'un sector és 512bytes. Podeu calcular la mida del vostre disc dur multiplicant la mida d'un sector pel nombre de sectors:
488397168*512= 250059350016 --> 250059350016 / 1000 (KB) /1000 (MB) / 1000 (GB) = 250.1 GB
Cal tenir en compte però que normalment treballem amb múltiples de 1024 i per aquesta raó la mida total real que detectaran eines com df serà inferior. A partir del 2000, els fabricats de disc van començar a comptar les G com a 1000x1000x1000 en comptes de 1024x1024x1024. Això fa que hi hagi els següents factors aprox. de conversió entre la mida dels disc que et compres i el que tens realment [1]:
El kylobytes reals (Sistema Internacional o SI) són uns 98% dels kibibyte Els megabytes reals (Sistema Internacional o SI) són uns 96% dels mebibyte Els gigabytes reals (Sistema Internacional o SI) són uns 93% dels mebibyte
Per aquesta raó un disc de 203.9GB acaba convertint-se en un disc d'uns 189G (un 93%). Tal com podeu veure a la següent captura de pantalla de gparted:
NOTA: df té la opció -H o --si per mostrar les mides en SI
Consulteu el següent apartat.
$ dd if=/dev/sdb2 of=~/partition.img bs=4096 conv=notrunc,noerror
NOTA: Val la pena que guardeu la imatge a un disc o partició que no sigui la partició del qual esteu fent una còpia. A més heu de tenir espai per guardar la partició. Atenció: l'espai necessari no és l'espai de dades ocupades de la partició sinó que és la mida de la partició sencera
Pels impacients les ordres són:
$ mkdir -p ~/ProvesDiscs/images/ $ dd if=/dev/zero of=~/ProvesDiscs/images/1GB.img bs=1024k count=1000 $ sudo losetup /dev/loop0 ~/ProvesDiscs/images/1GB.img $ sudo fdisk /dev/loop0 // Creeu dos particions la primera de 60 cilindres i la segona de la resta d'espai. Cal calcular els offsets $ sudo losetup -o 32256 /dev/loop1 /dev/loop0 $ sudo losetup -o 49351680 /dev/loop2 /dev/loop0 $ sudo mkfs.ext3 /dev/loop1 $ sudo mkfs.ext3 /dev/loop2 $ cd $ mkdir loop0p1 $ mkdir loop0p2 $ sudo mount /dev/loop1 loop0p1 $ sudo mount /dev/loop2 loop0p2
Explicació detallada
Podeu utilitzar dd per tal de crear un fitxer que sigui una imatge d'un disc dur buit:
$ mkdir -p ~/ProvesDiscs/images/
I ara creeu un disc, de per exemple 1GB:
$ dd if=/dev/zero of=~/ProvesDiscs/images/1GB.img bs=1024k count=1000 1000+0 registres llegits 1000+0 registres escrits 1048576000 octets (1,0 GB) copiats, 37,3634 s, 28,1 MB/s
Com podeu veure, el fitxer està ple de zeros però ocupa 1GB:
$ ls -lah ~/ProvesDiscs/images/1GB.img -rw-r--r-- 1 sergi sergi 1000M 2009-11-08 20:44 /home/sergi/ProvesDiscs/images/1GB.img $ od ~/ProvesDiscs/images/1GB.img 0000000 000000 000000 000000 000000 000000 000000 000000 000000 *
Premeu Ctrl+c.
Mireu que passa si intentem particionar amb fdisk el fitxer imatge:
$ fdisk ~/ProvesDiscs/images/1GB.img El dispositiu no conté ni taula de particions DOS vàlida, ni cap etiqueta de disc Sun, SGI o OSF Building a new DOS disklabel with disk identifier 0xf0ec759f. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Heu de definir els cilindres. Podeu fer això des del menú de funcions addicionals. Avís: el senyalador 0x0000 invàlid de la taula de particions 4 es corregirà amb w(escriu) Ordre (m per a obtenir ajuda): q
NOTA: Observeu que no us cal permisos de sudo per particionar amb fdisk un fitxer imatges que és vostre!
Sortiu amb q.
Com que no es tracta d'un dispositiu de blocs, tenim algunes inconsistències al treballar amb fdisk. Podem utilitzar un dispositiu de loop per tal d'accedir al fitxer com si es tractes d'un dispositiu de blocs. Primer consulteu quin és el primer dispositiu de loop lliure:
$ sudo losetup -f /dev/loop1
NOTA: Normalment hi ha 8 dispositius de loop del /dev/loop0 a /dev/loop7. Cal consultar quin és el primer que està lliure per si de cas ja teniu dispositius en ús
En el nostre cas el primer dispositiu lliure és /dev/loop1. Associem el fitxer al dispositiu
$ sudo losetup /dev/loop1 ~/ProvesDiscs/images/1GB.img
Ara ja podem utilitzar fdisk:
$ sudo fdisk /dev/loop1
NOTA: vegeu que ara no es mostra l'error de que cal definir els cilindres!
Creeu un parell de particions:
Ordre (m per a obtenir ajuda): n Acció de l'ordre e estesa p partició primària (1-4) p Nombre de partició (1-4): 1 Primera cilindre (1-127, valor per defecte 1): S'està utilitzant el valor per defecte 1 Last cilindre, +cilindres or +size{K,M,G} (1-12, valor per defecte 12): 60 Ordre (m per a obtenir ajuda): n Acció de l'ordre e estesa p partició primària (1-4) p Nombre de partició (1-4): 2 Primera cilindre (61-127, valor per defecte 61): 61 Last cilindre, +cilindres or +size{K,M,G} (61-127, valor per defecte 127): 127 Ordre (m per a obtenir ajuda): p Disc /dev/loop1: 104 MB, 104857600 octets 255 heads, 63 sectors/track, 12 cylinders Units = cilindres of 16065 * 512 = 8225280 bytes Disk identifier: 0x29836676 Dispositiu Arrenc. Inici Final Blocs Id Sistema /dev/loop1p1 1 60 481918+ 83 Linux /dev/loop1p2 61 127 538177+ 83 Linux Ordre (m per a obtenir ajuda): w S'ha modificat la taula de particions. S'està cridant ioctl() per rellegir la taula de particions. WARNING: Re-reading the partition table failed with error 22: Invalid argument. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) S'estan sincronitzant els discs.
El problema però, és que els dispositius loop no suporten particions. No trobarem els dispositius:
/dev/loop1p1 /dev/loop1p2
Al nostre sistema de fitxers. Podem tornar a utilitzar dispositius loopback per accedir a les particions amb l'opció offset. Primer necessitem saber en quins sectors comencen i acaben les particions
$ sudo fdisk -ul /dev/loop1 Disc /dev/loop1: 104 MB, 104857600 octets 255 heads, 63 sectors/track, 12 cylinders, total 204800 sectors Units = sectors of 1 * 512 = 512 bytes Disk identifier: 0x8f82f447 Dispositiu Arrenc. Inici Final Blocs Id Sistema /dev/loop1p1 63 963899 481918+ 83 Linux /dev/loop1p2 963900 2040254 538177+ 83 Linux
Els números que ens interessen són els sectors on s'inicien les particions:
El offset es calcula en bytes, per tant cal multiplicar el número de bytes oper sector pel nombre de sectors. Els offsets de les particions són:
Podem accedir a les particions tornant a utilitzar losetup amb l'opció offset:
$ sudo losetup -o 32256 /dev/loop2 /dev/loop1 $ sudo losetup -o 49351680 /dev/loop3 /dev/loop1
Abans de muntar les particions cal crear un sistema de fitxers:
$ sudo mkfs.ext3 /dev/loop2 mke2fs 1.41.9 (22-Aug-2009) Etiqueta del sistema de fitxers= Tipus de sistema operatiu: Linux Mida del bloc=1024 (log=0) Mida del fragment=1024 (log=0) 25688 nodes-i, 102368 blocs 5118 blocs (5.00%) reservats per al superusuari Bloc de dades inicial=1 Màxim de blocs del sistema de fitxers=67371008 13 grups de blocs 8192 blocs per grup, 8192 fragments per grup 1976 nodes-i per grup Còpies de seguretat del superbloc desades en els blocs: 8193, 24577, 40961, 57345, 73729 Escriptura de les taules de nodes-i:fet Creació del registre de transaccions (4096 blocs): fet Escriptura de la informació dels súperblocs i de comptabilitat del sistema de fitxers:fet This filesystem will be automatically checked every 27 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
$ sudo mkfs.ext3 /dev/loop3 mke2fs 1.41.9 (22-Aug-2009) Etiqueta del sistema de fitxers= Tipus de sistema operatiu: Linux Mida del bloc=4096 (log=2) Mida del fragment=4096 (log=2) 61056 nodes-i, 243951 blocs 12197 blocs (5.00%) reservats per al superusuari Bloc de dades inicial=0 Màxim de blocs del sistema de fitxers=251658240 8 grups de blocs 32768 blocs per grup, 32768 fragments per grup 7632 nodes-i per grup Còpies de seguretat del superbloc desades en els blocs: 32768, 98304, 163840, 229376 Escriptura de les taules de nodes-i:fet Creació del registre de transaccions (4096 blocs): fet Escriptura de la informació dels súperblocs i de comptabilitat del sistema de fitxers:fet This filesystem will be automatically checked every 39 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
Ara ja hi podeu accedir amb:
$ cd $ mkdir loop1p1 $ mkdir loop1p2 $ sudo mount /dev/loop2 loop1p1 $ sudo mount /dev/loo32 loop1p2
Fdisk intenta detectar la geometria del disc de forma automàtica. En alguns casos no ho aconseguirà i ho haureu d'indicar a mà. També pot ser útils quan utilitzem fdisk en un fitxer imatge o en qualsevol dispositiu que no sigui un dispositiu de blocs. Per exemple:
$ fdisk ~/ProvesDiscs/images/1GB.img El dispositiu no conté ni taula de particions DOS vàlida, ni cap etiqueta de disc Sun, SGI o OSF Building a new DOS disklabel with disk identifier 0xf0ec759f. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Heu de definir els cilindres. Podeu fer això des del menú de funcions addicionals. Avís: el senyalador 0x0000 invàlid de la taula de particions 4 es corregirà amb w(escriu) Ordre (m per a obtenir ajuda): x
Com podeu veure, al tractar-se d'una imatge de disc plena de zeros no hi ha taula de particions. Abans de poder crear-la cal definir la geometria del disc. El missatge indica que cal definir els cilindres però realment hem de definir els sectors, els cilindres, els sectors i els headers (capçals). Això ho podem fer des del mode expert (x):
Canviem el nombre de sectors per pista amb s (sectors)
Ordre d'expert (m per a obtenir ajuda): s Nombre de sectors (1-63, valor per defecte 63): 63 Avís: s'està establint el desplaçament del sector per a la compatibilitat amb DOS
Canviem el nombre de capçals amb l'opció h (headers)
Ordre d'expert (m per a obtenir ajuda): h Nombre de capçals (1-256, valor per defecte 255): 255
I finalment indiquem el nombre de cilindres amb c (cylinders). El disc que em creat amb dd era de 1GB. En un apartat anterior ja hem calculat que amb 63 sectors per pista i 255 capçals, amb la mida estàndard de 512bytes per sector tenim que cada cilindre ocupa:
8225280 bytes
Per tant 1GB/8225280 és un màxim de 1024 cilindres. Mireu que passa si agafem més de 1024 cilindres:
Ordre d'expert (m per a obtenir ajuda): c Nombre de cilindres (1-1048576): 1048576 El nombre de cilindres per a aquest disc està establert en 1048576. Això no és incorrecte, però és més gran que 1024 i podríeu tenir problemes amb certes configuracions de: 1) Programari que s'executa durant d'arrencada (p.ex., versions antigues del LILO) 2) En arrencar i particionar des d'un altre SO (p.ex., DOS FDISK, OS/2 FDISK)
Us dona una avís sobre els possibles problemes de tenir un disc de més de 1024 cilindres. En sistemes moderns normalment això ja no és un problema. Sortim del mode expert amb r (return)
Ordre d'expert (m per a obtenir ajuda): r
Ara ja podem crear una nova partició
Ordre (m per a obtenir ajuda): n Acció de l'ordre e estesa p partició primària (1-4) p Nombre de partició (1-4): 1 Primera cilindre (1-1048576,, valor per defecte 1): S'està utilitzant el valor per defecte 1 Last cilindre, +cilindres or +size{K,M,G} (1-267349, valor per defecte 267349): 10000 Ordre (m per a obtenir ajuda): p Disc /home/sergi/ProvesDiscs/images/1GB.img: 0 MB, 0 octets 255 heads, 63 sectors/track, 1048576 cylinders Units = cilindres of 16065 * 512 = 8225280 bytes Disk identifier: 0x52253795 Dispositiu Arrenc. Inici Final Blocs Id Sistema /home/sergi/ProvesDiscs/images/1GB.img1 1 100000 803249968+ 83 Linux Ordre (m per a obtenir ajuda): w S'ha modificat la taula de particions. S'estan sincronitzant els discs.
Ara si executeu:
$ fdisk -l ~/ProvesDiscs/images/1GB.img Heu de definir els cilindres. Podeu fer això des del menú de funcions addicionals. Disc /home/sergi/ProvesDiscs/images/1GB.img: 0 MB, 0 octets 255 heads, 63 sectors/track, 0 cylinders Units = cilindres of 16065 * 512 = 8225280 bytes Disk identifier: 0x52253795 Dispositiu Arrenc. Inici Final Blocs Id Sistema /home/sergi/ProvesDiscs/images/1GB.img1 1 100000 803249968+ 83 Linux La partició 1 té diferents finals físics/lògics: físic=(1023, 254, 63) lògic=(99999, 254, 63)
Fixeu-vos com fdisk detecta que em establert valors per a la partició que estan fora del possibles valors màxims a nivell físic.
Si tornem a repetir les operacions anteriors, però aquest com establint 1024 cilindres (mida màxim de 1GB). no us donarà pas aquest problema.
o executeu fdisk amb:NOTA: Haureu de definir el nombre de cilindres cada cop que torneu a executar fdisk
$ fdisk -C 1024 /home/sergi/ProvesDiscs/images/1GB.img
Teniu 3 opcions:
Permet accedir a un dispositiu a partir d'una posició concreta anomenada offset. La posició d'offset s'especifica amb bytes i s'ha de calcular a partir del sector d'inici de la partició a la que volem accedir. Normalment els sectors tenen com a mida 512bytes.
La primera partició sempre és troba després de la primera pista. Normalment hi ha 64 sectors per pista i per tant els primers 64 sectors (del 0 al 63) estan ocupats pel MBR i secció de compatibilitat de DOS.
La primera partició sempre es troba al sector 63, és a dir el seu offset en bytes és: nº sectors x nº de bytes per sector --> 63x512= 32256
La resta de particions es pot calcular l'offset mitjançant fdisk:
$ fdisk -u -l /home/sergi/ProvesDiscs/images/500MB.img Disc /home/sergi/ProvesDiscs/images/500MB.img: 0 MB, 0 octets 255 heads, 63 sectors/track, 0 cylinders, total 0 sectors Units = sectors of 1 * 512 = 512 bytes Disk identifier: 0x4169c257 Dispositiu Arrenc. Inici Final Blocs Id Sistema /home/sergi/ProvesDiscs/images/500MB.img1 63 642599 321268+ 83 Linux /home/sergi/ProvesDiscs/images/500MB.img2 642600 1012094 184747+ 83 Linux
La segona partició està accessible amb l'offset 642600512:
642600x512= 642600512
Consulteu Muntar la partició d'una imatge de disc amb mount
Consulteu:
Fdisk#Creant_una_imatge_de_disc_des_de_zero
I
losetup
Consulteu kpartx
L'ordre file també us mostrarà informació sobre les imatges:
$ file /home/sergi/ProvesDiscs/images/1GB.img /home/sergi/ProvesDiscs/images/1GB.img: x86 boot sector; partition 1: ID=0x83, starthead 1, startsector 63, 9960237 sectors; partition 2: ID=0x83, starthead 0, startsector 9960300, 6490260 sectors, code offset 0x0
Menú normal
Ordre (m per a obtenir ajuda): m Acció de l'ordre a estableix un senyalador d'arrencada b edita l'etiqueta de disc bsd c estableix el senyalador de compatibilitat amb DOS d suprimeix una partició l llista els tipus de particions conegudes m imprimeix aquest menú n afegeix una nova partició o crea una nova taula de particions DOS buida p imprimeix la taula de particions q surt sense desar els canvis s crea una etiqueta de disc Sun nova t canvia l'identificador del sistema d'una partició u canvia les unitats de visualització/entrada v verifica la taula de particions w escriu la taula al disc i surt x funcions addicionals (només experts)
Menú experts:
Ordre (m per a obtenir ajuda): x Ordre d'expert (m per a obtenir ajuda): m Acció de l'ordre b desplaça les dades d'una partició a l'inici c canvia el nombre de cilindres d imprimeix les dades crues a la taula de particions e llista les particions esteses f arregla l'ordre de les particions g crea una taula de particions IRIX (SGI) h canvia el nombre de capçals i change the disk identifier m imprimeix aquest menú p imprimeix la taula de particions q surt sense desar els canvis r torna al menú principal s canvia el nombre de sectors per pista v verifica la taula de particions w escriu la taula al disc i surt
Recursos:
Ordre (m per a obtenir ajuda): l 0 Buida 24 NEC DOS 81 Minix / antic L bf Solaris 1 FAT12 39 Plan 9 82 Intercanvi Linu c1 DRDOS/sec (FAT- 2 XENIX arrel 3c Recuperació Pa 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 40 Venix 80286 84 Unitat C: ocult c6 DRDOS/sec (FAT- 4 FAT16 <32M 41 PPC arrencada P 85 Linux estesa c7 Syrinx 5 Estesa 42 SFS 86 Joc de volums N da Dades sense S.F 6 FAT16 4d QNX4.x 87 Joc de volums N db CP/M / CTOS / . 7 HPFS/NTFS 4e QNX4.x segona p 88 Linux text de Utilitat Dell 8 AIX 4f QNX4.x tercera 8e Linux LVM df BootIt 9 AIX arrencable 50 OnTrack DM 93 Amoeba e1 Accés DOS a Gestor d'arrenc 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 Hivernació d'I eb Sis. Fitx. BeOS e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT f W95 Estesa (LBA 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/ 10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Arrencada Linux 11 FAT12 oculta 5c Priam Edisk a8 UFS de Darwin f1 SpeedStor 12 Diagnòstics Co 61 SpeedStor a9 NetBSD f4 SpeedStor 14 FAT16 <32M ocul 63 GNU HURD o SysV ab Arrencada de Da f2 Secundària DOS 16 FAT16 oculta 64 Novell Netware af HFS / HFS+ fb VMware VMFS 17 HPFS/NTFS ocult 65 Novell Netware b7 S.f. BSDI fc VMware VMKCORE 18 SmartSleep d'AS 70 DiskSecure Mult b8 Intercanvi de B fd Autodetecció R 1b W95 FAT32 ocult 75 PC/IX bb Boot Wizard ocu fe LANstep 1c W95 FAT32 (LBA) 80 Minix antic be Arrencada Solar ff BBT 1e W95 FAT16 (LBA)
NOTA: Les comandes següents poden fer malbé el vostre sistema de fitxers. Feu proves en un entorn de proves.
Podem utilitzar fdisk per generar les particions del disc amb:
$ sudo fdisk /dev/sda
Opcions de fdisk:
Consulteu un exemple a:
En anglès boot flag. S'estableix amb:
Ordre (m per a obtenir ajuda): a Nombre de partició (1-4): 1 Ordre (m per a obtenir ajuda): p Disc /home/sergi/ProvesDiscs/images/1GB.img: 0 MB, 0 octets 255 heads, 63 sectors/track, 1024 cylinders Units = cilindres of 16065 * 512 = 8225280 bytes Disk identifier: 0x406d3e03 Dispositiu Arrenc. Inici Final Blocs Id Sistema /home/sergi/ProvesDiscs/images/1GB.img1 * 1 1100 8835718+ 83 Linux La partició 1 té diferents finals físics/lògics: físic=(1023, 254, 63) lògic=(1099, 254, 63)
NOTA: Els sistemes Linux no utilitzen per a res la marca d'arrancada. De totes maneres se sol marcar la partició que té l'arrel com d'arrancada. La partició Windows on estigui el sistema necessita que és marqui com d'arrancada per tal que funcioni correctament el gestor d'arrancada de Windows NTLDR. Així doncs ens sistemes duals, es marcarà com a partició d'arrancada només la partició del sistema Windows
Un exemple de sistema amb arrancada dual Linux/Windows:
Dispositiu Arrenc. Inici Final Blocs Id Sistema /dev/sdb1 * 1 4080 32772568+ c W95 FAT32 (LBA) /dev/sdb2 4081 25810 174546225 f W95 Estesa (LBA) /dev/sdb3 25811 29890 32772600 83 Linux /dev/sdb4 29891 30401 4104607+ 82 Intercanvi Linux / Solaris /dev/sdb5 4081 25810 174546193+ 83 Linux
Ordre (m per a obtenir ajuda): t S'ha seleccionat la partició 1 Codi hex. (escriviu L per veure la llista de codis): L 0 Buida 24 NEC DOS 81 Minix / antic L bf Solaris 1 FAT12 39 Plan 9 82 Intercanvi Linu c1 DRDOS/sec (FAT- 2 XENIX arrel 3c Recuperació Pa 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 40 Venix 80286 84 Unitat C: ocult c6 DRDOS/sec (FAT- 4 FAT16 <32M 41 PPC arrencada P 85 Linux estesa c7 Syrinx 5 Estesa 42 SFS 86 Joc de volums N da Dades sense S.F 6 FAT16 4d QNX4.x 87 Joc de volums N db CP/M / CTOS / . 7 HPFS/NTFS 4e QNX4.x segona p 88 Linux text de Utilitat Dell 8 AIX 4f QNX4.x tercera 8e Linux LVM df BootIt 9 AIX arrencable 50 OnTrack DM 93 Amoeba e1 Accés DOS a Gestor d'arrenc 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O b W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 Hivernació d'I eb Sis. Fitx. BeOS e W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPT f W95 Estesa (LBA 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/ 10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Arrencada Linux 11 FAT12 oculta 5c Priam Edisk a8 UFS de Darwin f1 SpeedStor 12 Diagnòstics Co 61 SpeedStor a9 NetBSD f4 SpeedStor 14 FAT16 <32M ocul 63 GNU HURD o SysV ab Arrencada de Da f2 Secundària DOS 16 FAT16 oculta 64 Novell Netware af HFS / HFS+ fb VMware VMFS 17 HPFS/NTFS ocult 65 Novell Netware b7 S.f. BSDI fc VMware VMKCORE 18 SmartSleep d'AS 70 DiskSecure Mult b8 Intercanvi de B fd Autodetecció R 1b W95 FAT32 ocult 75 PC/IX bb Boot Wizard ocu fe LANstep 1c W95 FAT32 (LBA) 80 Minix antic be Arrencada Solar ff BBT 1e W95 FAT16 (LBA) Codi hex. (escriviu L per veure la llista de codis): 8 S'ha canviat el tipus del sistema de la partició 1 per 8 (AIX) Ordre (m per a obtenir ajuda): p Disc /home/sergi/ProvesDiscs/images/1GB.img: 0 MB, 0 octets 255 heads, 63 sectors/track, 1024 cylinders Units = cilindres of 16065 * 512 = 8225280 bytes Disk identifier: 0x406d3e03 Dispositiu Arrenc. Inici Final Blocs Id Sistema /home/sergi/ProvesDiscs/images/1GB.img1 1 1024 8225248+ 8 A
Com podeu veure, les últimes columnes de fdisk, mostren el codi del tipus partició x86. Aquest codi és un codi hexadecimal de 2 digits.
Els codis més habituals:
També conegut com a DOS disklabel. Compte que canviar aquest identificador pot fer perdre totes les dades d'un disc
Es pot modificar amb:
Ordre (m per a obtenir ajuda): x Ordre d'expert (m per a obtenir ajuda): i New disk identifier (current 0x406d3e03): 0x416d3e02 Disk identifier: 0x416d3e02
Podeu mostrar la taula de particions al mode expert (x)
Ordre d'expert (m per a obtenir ajuda): d Dispositiu: /home/sergi/ProvesDiscs/images/1GB.img 0x000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x1A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x1B0: 00 00 00 00 00 00 00 00 02 3E 6D 41 00 00 00 01 0x1C0: 01 00 83 FE FF FF 3F 00 00 00 C1 03 FB 00 00 00 0x1D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x1E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x1F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
Es pot fer amb heredoc
$ fdisk $hd &>/dev/null <<EOFP3 n p 1 1 t 7 a 1 w EOFP3
Vegeu també:
Consulteu cfdisk.
Consulteu sfdisk.