Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Llojet e sistemit të skedarëve - cili është ndryshimi midis FAT32, NTFS dhe exFAT. Çfarë duhet të bëni nëse të dhënat mungojnë

VLADIMIR MESHKOV

Arkitektura e sistemit të skedarëve FAT

Karakteristikat e përgjithshme të sistemit të skedarëve FAT. Struktura e ndarjes me sistemin e skedarëve FAT

Sistemi i skedarëve FAT (File Allocation Table) u zhvillua nga Bill Gates dhe Mark McDonald në 1977 dhe fillimisht u përdor në sistemin operativ 86-DOS. Për të arritur transportueshmërinë e programeve nga sistemi operativ CP/M në 86-DOS, kufizimet e pranuara më parë në emrat e skedarëve u ruajtën. 86-DOS u ble më pas nga Microsoft dhe u bë baza për MS-DOS 1.0, i lëshuar në gusht 1981. FAT u krijua për të punuar me disketë më të vogla se 1 MB dhe fillimisht nuk ofroi mbështetje për disqet e ngurtë.

Struktura e ndarjes FAT është paraqitur në figurë.

Në sistemin e skedarëve FAT, hapësira e diskut e një ndarjeje logjike ndahet në dy zona - zona e sistemit dhe zona e të dhënave (shih Fig. 1). Zona e sistemit krijohet dhe inicializohet gjatë formatimit dhe më pas përditësohet kur manipulohet struktura e skedarit. Zona e sistemit të sistemeve të skedarëve FAT përbëhet nga komponentët e mëposhtëm:

  • regjistrimi i nisjes (BR);
  • zona rezervë;
  • tabelat e ndarjes së skedarëve;
  • zona e direktoriumit rrënjë (nuk ekziston në FAT32).

Zona e të dhënave të një disku logjik përmban skedarë dhe drejtori në varësi të asaj rrënjë, dhe ndahet në seksione me të njëjtën madhësi - grupime. Një grup mund të përbëhet nga një ose disa sektorë të vendosur në mënyrë sekuenciale në një disk. Numri i sektorëve në një grup duhet të jetë shumëfish i 2N dhe mund të marrë vlera nga 1 në 64. Madhësia e grupit varet nga lloji i sistemit të skedarëve të përdorur dhe madhësia e diskut logjik.

Qëllimi, struktura dhe llojet e tabelës së ndarjes së skedarëve

FAT mori emrin e tij nga tabela e ndarjes së skedarëve me të njëjtin emër - Tabela e ndarjes së skedarëve, FAT. Tabela e ndarjes së skedarëve ruan informacione rreth grupimeve të një disku logjik. Çdo grup ka një element përkatës të tabelës FAT që përmban informacion nëse grupi është i lirë ose i zënë me të dhëna skedari. Nëse grupi është i zënë nga një skedar, atëherë adresa e grupit që përmban pjesën tjetër të skedarit tregohet në elementin përkatës të tabelës së ndarjes së skedarit. Numri i grupit fillestar të zënë nga një skedar ruhet në hyrjen e drejtorisë që përmban hyrjen e skedarit. Elementi i fundit i listës së grupimeve përmban shenjën e fundit të skedarit (EOF – End Of File). Dy elementët e parë FAT janë të rezervuara.

Sistemi i skedarëve FAT gjithmonë mbush hapësirën e lirë të diskut në mënyrë sekuenciale nga fillimi në fund. Kur krijoni një skedar të ri ose rritni një ekzistues, ai kërkon grupin e parë të lirë në tabelën e ndarjes së skedarëve. Nëse gjatë funksionimit disa skedarë janë fshirë dhe të tjerët kanë ndryshuar në madhësi, atëherë grupimet boshe që rezultojnë do të shpërndahen në të gjithë disk. Nëse grupimet që përmbajnë të dhënat e skedarit nuk janë të vendosura në një rresht, atëherë skedari bëhet i fragmentuar.

Ekzistojnë llojet e mëposhtme të FAT - FAT12, FAT16, FAT32. Emrat e llojeve FAT rrjedhin nga madhësia e elementit: Elementi FAT12 ka një madhësi prej 12 bit (1.5 bytes), FAT16 - 16 bit (2 bytes), FAT32 - 32 bit (4 bytes). Në FAT32, katër bitet më të rëndësishme rezervohen dhe injorohen gjatë funksionimit të sistemit operativ.

Drejtoria rrënjësore

Tabelat e ndarjes së skedarëve ndiqen nga direktoria rrënjësore. Çdo skedar dhe nëndrejtori në direktorinë rrënjë ka një hyrje prej 32 bajtësh që përmban emrin e skedarit, atributet e tij (të arkivuara, të fshehura, sistemi dhe vetëm për lexim), dhe datën dhe kohën kur është krijuar (ose modifikuar për herë të fundit), si si dhe informacione të tjera. Për sistemet e skedarëve FAT12 dhe FAT16, pozicioni i drejtorisë rrënjësore në ndarje dhe madhësia e tij janë të fiksuara në mënyrë të ngurtë. Në FAT32, direktoria rrënjësore mund të gjendet kudo në zonën e të dhënave të ndarjes dhe mund të jetë e çdo madhësie.

Formatet e emrave të skedarëve

Një nga karakteristikat e versioneve të mëparshme të FAT (FAT12 dhe FAT16) është përdorimi i emrave të shkurtër të skedarëve. Emri i shkurtër përbëhet nga dy fusha - një fushë 8-bajtë që përmban emrin aktual të skedarit dhe një fushë 3-bajtë që përmban shtesën (format "8.3"). Nëse emri i skedarit të futur nga përdoruesi është më i shkurtër se 8 karaktere, atëherë ai është i mbushur me hapësira (kodi 0x20); nëse shtrirja e futur është më e shkurtër se tre bajt, atëherë ajo është gjithashtu e mbushur me hapësira.

Struktura e elementit të drejtorisë për një emër skedari të shkurtër është paraqitur në Tabelën 1.

Bajti i parë i emrit të shkurtër shërben si një tregues i zënë në drejtori:

  • nëse bajt i parë është 0xE5, atëherë hyrja në direktorium është falas dhe mund të përdoret kur krijoni një skedar të ri;
  • nëse bajti i parë është 0x00, atëherë hyrja në direktorium është falas dhe është fillimi i një zone të pastër të drejtorisë (nuk ka hyrje të aktivizuara pas saj).

Tabela 1. Struktura e elementit të drejtorisë për një emër skedari të shkurtër

Paragjykim

Madhësia (byte) përmbajtja
0x00 11 Emri i shkurtër i skedarit
0x0B 1 Atributet e skedarit
0x0C 1 Rezervuar për Windows NT.
0x0D 1 Një fushë që specifikon kohën e krijimit të skedarit (përmban dhjetëra milisekonda). Fusha përpunohet vetëm në FAT32
0x0E 1 Koha e krijimit të skedarit. Fusha përpunohet vetëm në FAT32
0x10 2 Data e krijimit të skedarit. Fusha përpunohet vetëm në FAT32
0x12 2 Data e hyrjes së fundit në skedar për të shkruar ose lexuar të dhëna. Fusha përpunohet vetëm në FAT32
0x14 2 Fjala më domethënëse e numrit të grupit të parë të skedarit. Fusha përpunohet vetëm në FAT32
0x16 2 Koha e operacionit të fundit të shkrimit në skedar
0x18 2 Data e operacionit të fundit të shkrimit në skedar
0x1A 2 Fjalë e ulët e numrit të grupit të parë të skedarit
0x1C 4 Madhësia e skedarit në bajt

Ekzistojnë një numër kufizimesh në përdorimin e karaktereve ASCII në një emër të shkurtër:

  • nuk mund të përdorni karaktere me kode më të vogla se 0x20 (përveç kodit 0x05 në bajtin e parë të emrit të shkurtër);
  • nuk mund të përdorni karaktere me kode 0x22, 0x2A, 0x2B, 0x2C, 0x2E, 0x2F, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x5B, 0x5C, 0x5D;
  • Nuk mund të përdorni një karakter hapësinor (0x20) në bajtin e parë të emrit.

Sistemet e skedarëve FAT32 dhe VFAT (virtual FAT, zgjerimi FAT16) përfshijnë mbështetje për emrat e skedarëve të gjatë (LFN). Për të ruajtur një emër të gjatë, përdoren elementë të drejtorisë ngjitur me elementin kryesor. Emri i skedarit nuk shkruhet me karaktere ASCII, por në Unicode. Mund të ruani një fragment me deri në 13 karaktere Unicode në një hyrje direktorie. Pjesa e papërdorur e fragmentit të fundit është e mbushur me kode 0xFFFF. Struktura e elementit të drejtorisë për një emër skedari të gjatë tregohet në tabelën 2.

Tabela 2. Struktura e elementit të drejtorisë për një emër skedari të gjatë

Paragjykim Madhësia (byte) përmbajtja
0x00 1 Numri i fragmentit
0x01 10 Karakteret 1-5 të emrit të skedarit në Unicode
0x0B 1 Atributet e skedarit
0x0C 1 Flamujt bajt
0x0D 1 Shuma kontrolluese e emrit të shkurtër
0x0E 12 Karakteret 6-11 të emrit të skedarit në Unicode
0x1A 2 Numri i grupit të parë (i mbushur me zero)
0x1C 4 Karakteret 12-13 të emrit të skedarit në Unicode

Sektori i nisjes

Sektori i parë i një disku logjik me një sistem FAT përmban sektorin e nisjes dhe një bllok parametrash BIOS. Seksioni fillestar i këtij blloku është identik për të gjitha llojet e FAT (Tabela 3). Dallimet në strukturën e sektorëve të nisjes për lloje të ndryshme FAT fillojnë me kompensimin 0x24. Për FAT12 dhe FAT16, struktura tregohet në Tabelën 4, për FAT32 - në Tabelën 5.

Tabela 3. Seksioni fillestar i sektorit të nisjes

Paragjykim Madhësia, bajt Përshkrim
0x00 3 Kërcim i pakushtëzuar (jmp) në kodin e nisjes
0x03 8 ID e prodhuesit
0x0B 2 Numri i bajteve në sektor (512)
0x0D 1 Numri i sektorëve në një grup
0x0E 2 Numri i sektorëve rezervë në zonën rezervë të ndarjes, duke filluar nga sektori i parë i ndarjes
0x10 1 Numri i tabelave (kopjet) FAT
0x11 2 Për FAT12/FAT16 - numri i përshkruesve të skedarëve 32 bajt në direktorinë rrënjë; për FAT32 kjo fushë ka vlerën 0
0x13 2 Numri total i sektorëve në ndarje; nëse kjo fushë përmban 0, atëherë numri i sektorëve specifikohet nga fusha në zhvendosje 0x20
0x15 1 Lloji i medias. Për një hard disk, vlera është 0xF8; për një disketë (2 anë, 18 sektorë për pjesë) - 0xF0
0x16 2 Për FAT12/FAT16 kjo fushë përmban numrin e sektorëve e zënë nga një kopje e FAT; për FAT32 kjo fushë ka vlerën 0
0x18 2 Numri i sektorëve për pjesë (për ndërprerje 0x13)
0x1A 2 Numri i sipërfaqeve të punës (për ndërprerje 0x13)
0x1C 4 Numri i sektorëve të fshehur përpara ndarjes
0x20 4 Numri i përgjithshëm i sektorëve në ndarje. Fusha përdoret nëse seksioni mbi 65535 sektorë, përndryshe fusha përmban 0.

Tabela 4. Struktura e sektorit të nisjes FAT12/FAT16

Paragjykim Madhësia, byte Përshkrimi 0x24 1 Numri i diskut për ndërprerje 0x13 0x25 1 0x26 1 Flamuri i rekordit të zgjatur të nisjes (0x29) 0x27 4 Numri logjik i diskut 0x2B 11 Etiketa e diskut 0x36 8 Varg teksti me shkurtesën e llojit të sistemit të skedarëve

Tabela 5. Struktura e sektorit të nisjes FAT32

Madhësia, bajt Përshkrimi 4 Numri i sektorëve të zënë nga një kopje e FAT 2 Numri aktiv FAT 2 Numri i versionit FAT32: bajt i lartë - numri i versionit,junior – numri i rishikimit. Aktualisht vlera është 0:0 4 Numri i grupit për grupin e parë të drejtorisë rrënjësore 2 Numri i sektorit të strukturës FSINFO në zonën rezervë të diskut logjik 2 Numri i sektorit (në zonën rezervë të diskut logjik) i përdorurpër të ruajtur një kopje rezervë të sektorit të nisjes 12 Rezervuar (përmban 0)

Paragjykim
0x24
0x28
0x2A
0x2С
0x30
0x32
0x34

Përveç fushave të 2-ta dhe të 3-ta të listuara në tabela, sektori zero i diskut logjik duhet të përmbajë kodin 0x55 në bajt në offset 0x1FE dhe kodin 0xAA në bajtin tjetër (offset 0x1FF). Dy bajtët e treguar janë një shenjë e diskut të nisjes.

Kështu, sektori i nisjes kryen dy funksione të rëndësishme: përshkruan strukturën e të dhënave në disk, dhe gjithashtu lejon që sistemi operativ të niset.

Një disk logjik me një organizatë FAT32 përmban gjithashtu një strukturë FSInfo të vendosur në sektorin e parë të zonës rezervë. Kjo strukturë përmban informacione për numrin e grupimeve të lira në disk dhe numrin e grupit të parë të lirë në tabelën FAT. Formati i strukturës është përshkruar në tabelën 6.

Tabela 6. Struktura e sektorit FSIinfo dhe sektorit të nisjes rezervë FAT32

Madhësia, bajt Përshkrimi 4 Vlera 0x41615252 është një nënshkrim që tregon se ky sektor përmban strukturën FSIinfo 480 Rezervuar (përmban 0) 4 Vlera 0x61417272 (nënshkrimi) 4 Përmban numrin aktual të grupimeve të lira në disk. Nëse fusha përmban vlerën 0xFFFFFFFF, atëherë numri i grupimeve të lira është i panjohur dhe duhet të llogaritet 4 Përmban numrin e grupit nga i cili drejtuesi i diskut duhet të fillojë të kërkojë grupe falas. Nëse fusha përmban vlerën 0xFFFFFFFF, atëherë kërkimi për grupe të lira duhet të fillojë me grupin numër 2 12 Rezervuar (përmban 0) 4 Nënshkrimi 0xAA550000 – një shenjë e fundit të strukturës FSIinfo

Paragjykim
0x000
0x004
0x1E4
0x1E8
0x1 EC
0x1F0
0x1FC

Për të hyrë në përmbajtjen e një skedari të vendosur në një ndarje me sistemin e skedarëve FAT, duhet të merrni numrin e grupit të parë të skedarit. Ky numër, siç e kemi përcaktuar tashmë, është pjesë e hyrjes së drejtorisë që përmban hyrjen e skedarit. Numri i grupit të parë korrespondon me elementin e tabelës FAT, i cili ruan adresën e grupit që përmban pjesën tjetër të skedarit. Elementi FAT që korrespondon me grupin e fundit në zinxhir përmban nënshkrimin e fundit të skedarit. Për FAT12 kjo vlerë është 0xFFF, për FAT16 – 0xFFFF, për FAT32 – 0xFFFFFFFF.

Le të shohim zbatimin e softuerit të algoritmit të leximit për çdo lloj FAT dhe le të fillojmë me FAT16.

Të gjitha tekstet burimore të diskutuara në artikull janë të disponueshme në faqen e internetit të revistës.

Zbatimi i softuerit të algoritmit për leximin e një skedari nga një ndarje logjike me sistemin e skedarëve FAT16

Le të zhvillojmë një modul që lexon grupet e para N të një skedari të krijuar në një ndarje me sistemin e skedarëve FAT16. Parametri N (numri i grupimeve për t'u lexuar) është një vlerë e ndryshueshme dhe specifikohet nga përdoruesi. Emri i skedarit korrespondon me formatin "8.3", d.m.th. eshte e shkurter. Moduli funksionon nën Linux OS.

Le të përcaktojmë skedarët e nevojshëm të kokës:

#përfshi

#përfshi

#përfshi

#përfshi

#përfshi

#include "split.h"

Skedari i kokës split.h ka përmbajtjen e mëposhtme:

#përfshi

#define SHORT_NAME 13 // gjatësia maksimale e një emri të shkurtër skedari

strukturo emrin e ndarjes(

emri U8; // emri i skedarit

U8 ext; // zgjerimi i skedarit

Int name_len, // gjatësia e emrit të skedarit

Ext_len; // gjatësia e zgjatjes së skedarit

Struktura split_name është krijuar për të ruajtur përbërësit e një emri të shkurtër skedari (emri dhe zgjerimi) dhe gjatësitë e tyre.

Skedari i kokës përcakton llojet strukturore që përshkruajnë përbërësit kryesorë të sistemit të skedarëve FAT - sektori i nisjes, sektori FSIinfo, strukturat e elementeve të drejtorisë për emrat e skedarëve të shkurtër dhe të gjatë.

Le të shqyrtojmë shkurtimisht fushat që përfshihen në secilën prej këtyre strukturave.

    1. Struktura e sektorit të nisjes fat_boot_sector:
      • __s8 system_id– identifikuesin e sistemit;
      • __u8 sektori_madhësia – madhësia e sektorit në bajt;
      • __u8 madhësia e grupit– madhësia e grupimit në sektorë;
      • __u16 e rezervuar- numri i sektorëve rezervë në zonën rezervë të ndarjes;
      • __u8 yndyrna– numri i kopjeve FAT;
      • __u8 dir_hyrje– numri i përshkruesve të skedarëve 32 bajt në direktorinë rrënjë;
      • __u8 sektorë– numri i sektorëve në ndarje; nëse kjo fushë është 0, përdoret fusha total_sect;
      • __u8 media– lloji i medias në të cilën është krijuar sistemi i skedarëve;
      • __u16 dhjamë_gjatësi– Madhësia e FAT në sektorë;
      • __u32 total_sekti– madhësia e ndarjes FAT në sektorë (nëse fusha e sektorëve == 0).
      • __u32 yndyrë32_gjatësi– Madhësia FAT32 në sektorë;
      • __u32 grupi_rrënjë– numri i grupit të parë të direktoriumit rrënjë;
      • __u16 info_sector– numri i sektorit që përmban strukturën FSIinfo.

Fushat e mëposhtme të kësaj strukture përdoren vetëm nga FAT32:

  1. Struktura e sektorit FSIinfo struct fat_boot_fsinfo:
    • __u32 nënshkrimi1– firma 0x41615252;
    • __u32 nënshkrimi2– firma 0x61417272;
    • __u32 grupime të lira– numri i grupimeve të lira. Nëse fusha përmban -1, kërkimi për grupe të lira duhet të fillojë me grupin numër 2.
  2. Struktura e strukturës së elementit të drejtorisë së emrit të shkurtër msdos_dir_entry:
    • __s8 emri, teksti– emri dhe shtrirja e skedarit;
    • __u8 attr– atributet e skedarit;
    • __u8 ctime_ms– kjo fushë specifikon kohën e krijimit të skedarit në ms (përdoret vetëm FAT32);
    • __u16 ckohë– koha e krijimit të skedarit (përdoret vetëm FAT32);
    • datë __u16– data e krijimit të skedarit (përdoret vetëm FAT32);
    • datë __u16– data e hyrjes së fundit në skedar (përdoret vetëm FAT32);
    • __u16 starthi– 16 bitet më domethënëse të numrit të grupit të parë të skedarit (përdoret vetëm FAT32);
    • __u16 ora, data, fillimi– koha dhe data e krijimit të skedarit, numri i grupit të parë të skedarit;
    • madhësia __u32– madhësia e skedarit (në bajt).
  3. Struktura e elementit të drejtorisë së emrit të gjatë:
    • __u8 id– numri i elementit;
    • __u8 emri0_4– karakteret 1 – 5 të emrit;
    • __u8 attr– atributet e skedarit;
    • __u8 alias_checksum– kontrolli i emrit të shkurtër;
    • __u8 emri5_10– simbolet 6 – 11 të emrit;
    • __u8 emri11_12– simbolet 12 – 13 të emrit.

Le të vazhdojmë të shqyrtojmë zbatimin e softuerit të algoritmit dhe të përcaktojmë emrin e ndarjes në të cilën u krijua sistemi i skedarëve FAT16:

#ifndef FAT16_PART_NAME

#define FAT16_PART_NAME "/dev/hda1"

#përfundim

Strukturat globale:

struct fat_boot_sector fbs; // Struktura e sektorit të nisjes

struct msdos_dir_entry dentry; // Struktura e elementit të drejtorisë

Variablat globalë:

U16 *yndyrë16; // kopjoni tabelën FAT16 këtu

Përmasat e sektorit U16; // madhësia e sektorit (nga FAT16)

U16 dir_hyrjet; // numri i përshkruesve 32 bajt

// në direktorinë rrënjë (0 për FAT32)

Sektorët U16; // numri total i sektorëve në ndarje

U32 yndyrë16_madhësi; // Madhësia FAT16

U32 madhësia e rrënjës; // madhësia e direktoriumit rrënjë

U16 byte_per_cluster; // madhësia e grupit në bajt

U16 grupi i ardhshëm; // grupi tjetër në zinxhir

yndyrë int;

Le të fillojmë me funksionin kryesor:

int main()

Int num;

Ne specifikojmë emrin e plotë të skedarit, përmbajtjen e të cilit duam të lexojmë. Më lejoni t'ju kujtoj se ne punojmë vetëm me emra të shkurtër skedarësh. Procedura për të punuar me emra të gjatë nuk diskutohet në këtë artikull.

U8 *full_path = "/Folder1/Folder2/text.txt";

Hapni skedarin e pajisjes:

E fortë = e hapur (FAT16_PART_NAME, O_RDONLY);

Nëse (e vështirë< 0) {

Gabim (FAT16_PART_NAME);

Dalje (-1);

Lexojmë 10 grupimet e para të skedarit. Leximi kryhet nga funksioni fat16_read_file(). Parametrat e funksionit janë emri i plotë i skedarit dhe numri i grupeve për t'u lexuar. Funksioni kthen numrin e grupeve të lexuara ose -1 nëse ka ndodhur një gabim gjatë leximit:

Numri = fat16_skedari_lexuar (rruga e plotë, 10);

Nëse (num< 0) perror("fat16_read_file");

Else printf("Lexo %d grupe ", num);

Mbyllni skedarin e pajisjes dhe dilni:

Mbyll (e vështirë);

Kthimi 0;

Funksioni për leximin e grupimeve të skedarëve ka formën e mëposhtme:

int fat16_read_file(__u8 *rruga_plotë, int num)

Struktura split_name sn; // Struktura për ruajtjen e komponentëve të skedarit

U8 tmp_emri_buff; // buffer për ruajtjen e përkohshme të komponentëve të shtegut të plotë të skedarit

Int statike i = 1;

Int n;

U8 *tmp_buff;

U16 start_cluster, next_cluster;

Ne renditëm parametrat e funksionit kur shqyrtojmë funksionin kryesor.

Operacionet përgatitore - rivendosni bufferin tmp_name_buff dhe strukturën split_name sn:

Karakteri i parë në një emër absolut të një skedari duhet të jetë një prerje përpara (/). Le ta kontrollojmë këtë:

Lexoni sektorin e nisjes nga ndarja:

If(read_fbs()< 0) return -1;

Sektori i nisjes së lexuar tani ndodhet në strukturën globale struct fat_boot_sector fbs. Le të kopjojmë madhësinë e sektorit, numrin e hyrjeve në direktorinë rrënjë dhe numrin total të sektorëve në ndarje nga kjo strukturë:

Le të përcaktojmë madhësinë e grupit në bajt:

Byte_per_cluster = fbs.cluster_size * 512

Le të shfaqim informacionin e vendosur në sektorin e nisjes:

Printf(" ID e sistemit - %s ", fbs.system_id);

Printf("Madhësia e sektorit - %d ", madhësia e sektorit);

Printf("Madhësia e grupit - %d ", fbs.cluster_size);

Printf("Rezervuar - %d ", fbs.rezervuar);

Printf("Numri FAT - %d ",fbs.fats);

Printf("Hyrjet direkt - %d ", dir_entries);

Printf(" Sektorët - %d ", sektorët);

Printf("Media - 0x%X ", fbs.media);

Printf("gjatësia FAT16 - %u ", fbs.fat_length);

Printf("Sekti total - %u ", fbs.total_sect);

Printf("Bajt për grup - %d ", bajt_për_grup);

Ne llogarisim madhësinë e FAT16 në bajt dhe e lexojmë atë:

Fat16_madhësia = fbs.gjatësia_dhjami * 512;

If (read_fat16 ()< 0) return -1;

Leximi i drejtorisë rrënjësore:

If(read_root_dentry()< 0) return -1;

Treguesi dir_entry tani është i pozicionuar në vendndodhjen e memories që përmban hyrjet e direktorisë rrënjë. Madhësia e kësaj zone të memories është e barabartë me madhësinë e drejtorisë rrënjësore (madhësia_rrënjë).

Le të ruajmë (për kontroll) përmbajtjen e drejtorisë rrënjësore në një skedar të veçantë:

#ifdef DEBUG

mbyll (yndyrë);

#përfundim

Ne llogarisim fillimin e zonës së të dhënave:

Data_start = 512 * fbs.reserved + fat16_size * fbs.fats + root_size;

Duke pasur të gjitha hyrjet në direktorinë rrënjë, mund të arrijmë te përmbajtja e skedarit test.txt. Për këtë qëllim, ne organizojmë një cikël. Në trupin e ciklit, ne do të analizojmë emrin e plotë të skedarit, duke theksuar elementët e tij - nëndrejtoritë (kemi dy prej tyre, Folder1 dhe Folder2) dhe emrin e skedarit që kërkojmë (test.txt).

Ndërsa (1) (

Memset(tmp_name_buff, 0, SHORT_NAME);

Memset((void *)&sn, 0, sizeof(struct split_name));

Për(n = 0; n< SHORT_NAME; n++, i++) {

If((tmp_name_buff[n] == "/") || (tmp_name_buff[n] == "?")) (

I++;

Pushim;

Tmp_name_buff[n] = "?";

Mbushim strukturën struct split_name sn me informacionin e duhur. Funksioni split_name kryen mbushjen dhe kontrollon emrin e skedarit për pajtueshmëri me formatin "8.3":

< 0) {

Printf ("emri i pavlefshëm");

Kthimi -1;

Për çdo element të emrit të plotë të skedarit, ne përcaktojmë një grup fillestar. Për ta bërë këtë, ne shikojmë në elementët e drejtorisë (duke filluar nga rrënja) një hyrje që korrespondon me elementin e emrit të plotë dhe lexojmë këtë hyrje. Procedura e kërkimit kryhet nga funksioni get_dentry():

Nëse (get_dentry(&sn)< 0) {

Printf ("Nuk ka skedar të tillë!");

Kthimi -1;

Kontrollimi i atributeve të skedarit. Nëse kjo është një drejtori, lexoni përmbajtjen e saj dhe vazhdoni ciklin:

Nëse (dentry.attr & 0x10) (

If (read_directory (dentry.start)< 0) return -1;

Vazhdo;

Nëse ky është një skedar, ne lexojmë grupet e para nume. Për kontroll, ne do ta ruajmë informacionin e lexuar në një skedar të veçantë:

Nëse (dentry.attr & 0x20) (

Start_cluster = dentry.start;

Tmp_buff = (__u8 *)malloc(byte_per_cluster); // Përmbajtja e grupit do të lexohet këtu

N = hapur ("grup", O_CREAT|O_RDWR, 0600); // ruani informacionin e lexuar në këtë skedar

Nëse (n< 0) {

Perror ("i hapur");

Kthimi -1;

Për të lexuar grupet e skedarëve, ne organizojmë një lak:

Për (i = 0; i< num; i++) {

Ne lexojmë përmbajtjen e grupit në bufferin tmp_buff dhe e ruajmë atë në një skedar të veçantë:

< 0) return -1;

< 0) {

Perror ("shkruaj");

Mbyll(n);

Kthimi -1;

Ne lexojmë nga FAT16 numrin e grupit të ardhshëm të zënë nga ky skedar. Nëse ky është grupi i fundit, ne ndërpresim ciklin dhe kthehemi në funksionin kryesor:

#ifdef DEBUG

Printf("OK. Lexuar");

Printf("grupi i ardhshëm i skedarit - 0x%X .. ", grupi tjetër);

#përfundim

Nëse(grupi_tjetër == EOF_FAT16) (

#ifdef DEBUG

Printf ("grupi i fundit.");

#përfundim

Falas (tmp_buff);

Mbyll(n);

Kthimi ++i;

#ifdef DEBUG

Printf ("ndalo leximin");

#përfundim

Kthimi i;

Leximi i sektorit të nisjes FAT16 kryhet nga funksioni read_fbs(). Rezultati vendoset në strukturën globale të fbs:

int read_fbs()

If(lexo(hard,(__u8 *)&fbs, sizeof(fbs))< 0) return -1;

Kthimi 0;

Leximi i tabelës së ndarjes së skedarëve të sistemit të skedarëve FAT16 kryhet nga funksioni read_fat16():

int read_fat16()

U64 kërko = (__u64)(fbs.e rezervuar) * 512; // zhvendoset në FAT16 nga fillimi i ndarjes

Fat16 = (i pavlefshëm *) malloc (fat16_madhësia);

If(pread64(fort, (__u8 *)fat16, fat16_size, seek)< 0) return -1;

Kthimi 0;

Funksioni read_root_dentry() lexon direktorinë rrënjë:

int read_root_dentry()

U64 seek = (__u64)fbs.e rezervuar * 512 + yndyrë16_madhësi * fbs.yndyrna; // zhvendoset në direktorinë rrënjë që nga fillimi i ndarjes

Madhësia_rrënjë = 32 * hyrje_dir; // llogarit madhësinë e direktoriumit rrënjë

Dir_hyrja = (__u8 *)malloc(madhësia_rrënjë);

Nëse(!dir_hyrja) kthen -1;

Memset(dir_hyrja, 0, madhësia e rrënjës);

If (pread64 (hard, dir_entry, root_size, seek)< 0) return -1;

Kthimi 0;

Leximi i një grupi që i përket një skedari kryhet nga funksioni read_cluster(). Parametrat hyrës të funksionit janë numri i grupit cluster_num dhe një tregues në buferin __u8 *tmp_buff, ku duhet të vendoset rezultati i leximit. Kompensimi në grup në ndarje llogaritet duke përdorur formulën (shih):

SEEK = DATA_START + (CLUSTER_NUM - 2) * BYTE_PER_CLUSTER,

  • KËRKONI– zhvendosja në grup në ndarje
  • DATA_START– fillimi i zonës së të dhënave
  • CLUSTER_NUM– numri serial i grupit
  • BYTE_PER_CLUSTER– madhësia e grupit në bajt

int read_cluster (__u16 cluster_num, __u8 *tmp_buff)

U64 seek = (__u64)(byte_per_cluster) * (cluster_num - 2) + data_start; // llogarit kompensimin në grup

< 0) return -1;

Kthimi 0;

Funksioni read_directory lexon hyrjet nga një direktori (jo nga direktoria rrënjësore) dhe e vendos rezultatin në vendndodhjen e kujtesës në të cilën është vendosur treguesi dir_entry:

int read_directory (__u16 start_cluster)

Int i = 1;

U16 grupi i ardhshëm;

Për (; ;i++) (

Ne ndajmë memorie për të ruajtur përmbajtjen e drejtorisë, lexojmë përmbajtjen e grupit fillestar dhe marrim vlerën e grupit tjetër nga tabela FAT16:

Nëse(!dir_hyrja) kthen -1;

< 0) return -1;

Tjetër_grup = yndyrë16;

Le të ruajmë përmbajtjen e drejtorisë në një skedar të veçantë (për kontroll):

#ifdef DEBUG

Printf("Grupi tjetër - 0x%X ", grupi_tjetër);

Fat = hapur ("dir16", O_CREAT|O_WRONLY, 0600);

Shkruaj (fat, dir_hyrja, madhësia e rrënjës);

mbyll (yndyrë);

#përfundim

Nëse arrihet grupi i fundit, ne dalim nga cikli, përndryshe vazhdojmë të lexojmë direktorinë, duke rritur madhësinë e bufferit dir_entry me një grup tjetër:

If(next_cluster & EOF_FAT16) thyejnë;

Start_cluster = grupi_tjetër;

Kthimi 0;

Funksioni get_dentry() kërkon përmbajtjen e drejtorisë për një element që korrespondon me skedarin që kërkohet. Parametrat hyrës të këtij funksioni janë një tregues për strukturën e strukturës split_name *sn që përmban elementet e emrit të skedarit të shkurtër:

Int i = 0;

Buffer global dir_entry përmban një sërë hyrjesh në direktorium në të cilin do të kërkojmë një hyrje skedari (ose drejtorie). Për të kërkuar, ne organizojmë një cikël. Në trupin e lakut, ne kopjojmë elementët e drejtorisë në strukturën globale të dhëmbëve dhe krahasojmë vlerat e fushave të emrit dhe ext të kësaj strukture me fushat përkatëse të strukturës split_name *sn. Përputhja e këtyre fushave do të thotë që ne kemi gjetur një hyrje për skedarin që po kërkojmë në grupin e elementeve të drejtorisë:

për (; ; i++) (

If(!(memcmp(dentry.name, sn->emri, sn->emri_len)) &&

!(memcmp(dentry.ext, sn->ext, sn->ext_len)))

Pushim;

Nëse(!dentry.name) kthen -1;

#ifdef DEBUG

Printf("emri - %s", dentry.name);

Printf("start cluster - 0x%X ", dentry.start);

Printf("madhësia e skedarit - %u ", dentry.size);

Printf("file attrib - 0x%X ", dentry.attr);

#përfundim

Kthimi 0;

I gjithë kodi i mësipërm ndodhet në direktorinë FAT16, skedari fat16.c. Për të marrë një modul të ekzekutueshëm, krijoni një Makefile me përmbajtjen e mëposhtme:

INCDIR = /usr/src/linux/include

FONIK = i pastër

Fat16: yndyrë16.o ndarë.o

Gcc -I$(INCDIR) $^ -g -o $@

%.o: %.c

Gcc -I$(INCDIR) -DDEBUG -c $^

Pastroni:

Rm -f *.o

Rm -f ./fat16

Zbatimi i softuerit të algoritmit për leximin e një skedari nga një ndarje logjike me sistemin e skedarëve FAT12

Në përgjithësi, algoritmi për leximin e një skedari nga një ndarje FAT12 është identik me algoritmin për leximin e një skedari nga një ndarje FAT16. Dallimi qëndron në procedurën e leximit të elementeve nga tabela FAT12. Ne e konsideruam tabelën FAT16 si një grup të thjeshtë elementësh 16-bitësh. Për të lexuar elementet e tabelës FAT12, propozohet algoritmi i mëposhtëm:

  • shumëzojeni numrin e elementit me 1,5;
  • nxjerr një fjalë 16-bit nga FAT duke përdorur rezultatin e operacionit të mëparshëm si kompensim;
  • nëse numri i elementit është çift, kryeni veprimin AND në fjalën e lexuar dhe maskën 0x0FFF. Nëse numri është tek, zhvendoseni fjalën e lexuar nga tabela me 4 bit drejt shifrave më të ulëta.

Bazuar në këtë algoritëm, ne zbatojmë funksionin e leximit të elementeve nga tabela FAT12:

int get_cluster (__u16 cluster_num)

U16 kërkoj;

grupi U16;

Ne llogarisim kompensimin në tabelën FAT12 dhe lexojmë një fjalë 16-bit nga tabela:

Kërko = (numri_grup * 3) / 2;

Memcpy((__u8 *)&clust, (__u8 *)(fat12 + kërko), 2);

Nëse numri fillestar i grupit është numër çift, vlerën e lexuar nga tabela e zhvendosim me 4 bit drejt biteve të rendit të ulët, nëse është tek, e përmbledhim me 0x0FFF:

If(cluster_num % 2) clust >>= 4;

Grup tjetër &= 0x0FFF;

Ky fragment mund të zbatohet edhe në asembler:

" xorw %%ax, %%ax "

" btw $0, %%cx "

"jnc 1f"

" shrw $4, %%dx "

"jmp 2f"

"1: andw $0x0FFF, %%dx"

"2: movw %%dx, %%ax "

:"=a" (tjetër)

:"d" (grumbull), "c" (grup_num));

Ne e kthejmë rezultatin:

Kthimi;

Le të hedhim një vështrim më të afërt në vetë algoritmin. Le të supozojmë se një skedar është krijuar në një ndarje FAT12 që zë grupet e 9-të dhe të 10-të. Çdo element FAT12 merr 12 bit. Sepse nga tabela lexojmë elementë 16-bitësh, atëherë zhvendosja në elementin e 9-të do të jetë e barabartë me 13 bajt (9 * 1.5 = 13, pjesa tjetër hidhet), ndërsa 4 bitët e poshtëm do t'i përkasin elementit të 8-të FAT. Ata duhet të hidhen, dhe për ta bërë këtë, mjafton të zhvendosni elementin e lexuar me 4 bit drejt shifrave më të ulëta, të cilat sigurohen nga algoritmi. Zhvendosja në elementin e 10-të do të jetë 15 bajt, dhe 4 bitët më të rëndësishëm do t'i përkasin elementit të 11-të FAT. Për t'i hedhur poshtë, është e nevojshme të kryhet një operacion AND në elementin e 10-të dhe maskën 0x0FFF, e cila gjithashtu korrespondon me algoritmin e mësipërm.

Tekstet burimore të modulit për leximin e një skedari nga një ndarje FAT12 ndodhen në direktorinë FAT12, skedari fat12.c.

Zbatimi i softuerit të algoritmit për leximin e një skedari nga një ndarje logjike me sistemin e skedarëve FAT32

Algoritmi për leximin e një skedari nga një ndarje me sistemin e skedarëve FAT32 praktikisht nuk është i ndryshëm nga algoritmi për FAT16, përveç se në FAT32 drejtoria rrënjë mund të vendoset kudo në ndarje dhe të ketë një madhësi arbitrare. Prandaj, për ta bërë më interesante, le ta komplikojmë detyrën - supozojmë se dimë vetëm numrin e ndarjes me sistemin e skedarëve FAT32. Për të lexuar informacionin nga kjo ndarje, së pari duhet të përcaktoni koordinatat e saj - zhvendosja në ndarje nga fillimi i diskut. Dhe për këtë ju duhet të keni një ide të strukturës logjike të hard drive.

Struktura logjike e një hard disk

Le të shqyrtojmë strukturën logjike të një hard disk që përputhet me standardin e Microsoft - "ndarje kryesore - ndarje e zgjeruar - ndarje jo-DOS".

Hapësira e diskut të ngurtë mund të organizohet në një ose më shumë ndarje, dhe ndarjet mund të përmbajnë një ose më shumë disqe logjike.

Master Boot Record (MBR) ndodhet në hard disk në adresën fizike 0-0-1. Struktura MBR përmban elementët e mëposhtëm:

  • bootstrap jo-sistem (NSB);
  • tabela që përshkruan ndarjet e diskut (tabela e ndarjeve, PT). Ndodhet në MBR në offset 0x1BE dhe zë 64 bajt;
  • Nënshkrimi MBR. Dy bajtët e fundit të MBR duhet të përmbajnë numrin 0xAA55.

Tabela e ndarjeve përshkruan vendosjen dhe karakteristikat e ndarjeve të disponueshme në hard disk. Ndarjet e diskut mund të jenë të dy llojeve - primare (primare, kryesore) dhe të zgjeruara (të zgjatura). Numri maksimal i ndarjeve kryesore është katër. Prania e të paktën një ndarje primare në disk është e detyrueshme. Një ndarje e zgjeruar mund të ndahet në një numër të madh nënndarjesh - disqe logjike. Një strukturë e thjeshtuar e MBR është paraqitur në Tabelën 7. Tabela e ndarjes ndodhet në fund të MBR; 16 bajt janë ndarë për të përshkruar ndarjen në tabelë.

Tabela 7. Struktura MBR

Paragjykim Madhësia, bajt 0 446 0x1BE 16 0x1 CE 16 0x1DE 16 0x1EE 16 0x1FE 2

Struktura e hyrjes në tabelën e ndarjes është paraqitur në tabelën 8.

Tabela 8. Struktura e hyrjes në tabelën e ndarjes

Paragjykim Madhësia, bajt përmbajtja
0x00 1 Shenja e aktivitetit (0 - ndarja nuk është aktive, 0x80 - ndarja është aktive)
0x01 1 Numri i kokës së diskut nga i cili fillon ndarja
0x02 2 Numri i cilindrit dhe numri i sektorit nga i cili fillon seksioni
0x04 1 Kodi i llojit të ndarjes së ID-së së sistemit
0x05 1 Numri i kokës së diskut ku përfundon ndarja
0x06 2 Numri i cilindrit dhe numri i sektorit që përfundon seksionin
0x08 4 Numri absolut (logjik) i sektorit fillestar të ndarjes
0x0C 4 Madhësia e ndarjes (numri i sektorëve)

Bajt i parë në elementin e seksionit është flamuri i aktivitetit të seksionit (0 - joaktiv, 0x80 - aktiv). Përdoret për të përcaktuar nëse ndarja është boot e sistemit dhe nëse ka nevojë për të ngarkuar sistemin operativ prej tij kur kompjuteri fillon. Vetëm një seksion mund të jetë aktiv. Flamuri i aktivitetit të ndarjes ndiqet nga koordinatat e fillimit të ndarjes - tre bajt që tregojnë numrin e kokës, numrin e sektorit dhe numrin e cilindrit. Numrat e cilindrit dhe sektorit specifikohen në formatin e ndërprerjes Int 0x13, d.m.th. bitet 0-5 përmbajnë numrin e sektorit, bitet 6-7 - dy bitet më domethënëse të numrit të cilindrit 10-bit, bitet 8-15 - tetë bitet më pak të rëndësishme të numrit të cilindrit. Kjo pasohet nga një kod ID i Sistemit, që tregon se ky seksion i përket një sistemi operativ të caktuar. Identifikuesi zë një bajt. Pas identifikuesit të sistemit janë koordinatat e fundit të seksionit - tre bajt që përmbajnë përkatësisht numrat e kokës, sektorit dhe cilindrit. Katër bajtët e ardhshëm janë numri i sektorëve përpara ndarjes, dhe katër bajtët e fundit janë madhësia e ndarjes në sektorë.

Kështu, një element i tabelës së ndarjes mund të përshkruhet duke përdorur strukturën e mëposhtme:

struct pt_struct (

U8 bootable; // flamuri i aktivitetit të seksionit

U8 fillimi_pjesa; // koordinatat e fillimit të seksionit

U8 tip_pjese; // identifikuesi i sistemit

U8 fund_pjesa; // koordinatat e fundit të seksionit

U32 sekti_para; // numri i sektorëve para ndarjes

U32 sekti_total; // madhësia e ndarjes në sektorë (numri i sektorëve në ndarje)

Elementi primar i ndarjes drejton drejtpërsëdrejti në sektorin e nisjes së diskut logjik (gjithmonë ka vetëm një disk logjik në ndarjen parësore), dhe elementi i ndarjes së zgjeruar drejton drejtpërsëdrejti në një listë disqesh logjike të përbërë nga struktura të quajtura MBR dytësore (Secondary MBR, SMBR).

Çdo disk i ndarjes së zgjeruar ka bllokun e vet SMBR. SMBR ka një strukturë të ngjashme me MBR, por nuk ka një rekord boot (të mbushur me zero) dhe përdoren vetëm dy nga katër fushat e përshkruesit të ndarjes. Elementi i parë i seksionit tregon në diskun logjik, elementi i dytë tregon strukturën tjetër SMBR në listë. SMBR e fundit e listës përmban një kod ndarjeje zero në elementin e tij të dytë.

Le të kthehemi te moduli për leximin e një skedari nga një ndarje FAT32.

Skedarët e kokës:

#përfshi

#përfshi

#përfshi

#përfshi

#përfshi

Nënshkrimi MBR:

#define NËNSHKRIMI 0xAA55

Skedari i pajisjes nga i cili do të lexohet informacioni i ndarjes:

#define DEVICE "/dev/hda"

Madhësia e elementit të tabelës së ndarjes (16 bajt):

#define PT_SIZE 0x10

Vargu i mëposhtëm i strukturave harton kodin e tipit të një seksioni me paraqitjen e tij simbolike:

sistemet e strukturës (

Lloji i pjesës U8;

U8 *emri_pjese;

strukturo systypes i386_sys_types = (

(0x00, "Bosh"),

(0x01, "FAT12"),

(0x04, "FAT16<32M"},

(0x05, "E zgjeruar"),

(0x06, "FAT16"),

(0x0b, "Win95 FAT32"),

(0x0c, "Win95 FAT32 (LBA)"),

(0x0e, "Win95 FAT16 (LBA)"),

(0x0f, "Win95 Ext"d (LBA)"),

(0x82, "Swap Linux"),

(0x83, "Linux"),

(0x85, "Linux i zgjeruar"),

(0x07, "HPFS/NTFS")

Le të përcaktojmë numrin e elementeve në grupin i386_sys_types duke përdorur makron PART_NUM:

#define PART_NUM (madhësia e(i386_sys_types) / sizeof(i386_sys_types))

Le të vendosim një kufi në numrin e disqeve logjike:

#define MAX_PJESA 20

Vargu i mëposhtëm i strukturës do të përmbajë informacion në lidhje me disqet logjike në pajisje (hard drive):

struct pt_struct (

U8 bootable;

U8 fillimi_pjesa;

U8 tip_pjese;

U8 fund_pjesa;

U32 sekti_para;

U32 sekti_total;

) pt_t;

int e vështirë; // përshkruesi i skedarit të pajisjes

U8 mbr; // numëro MBR këtu

Numri i ndarjes në të cilën u krijua sistemi i skedarëve FAT32:

#define FAT32_PART_NUM 5

Strukturat e sektorit të nisjes, sektorit FSIinfo dhe hyrjes së drejtorisë (të përcaktuara në skedar ):

struct fat_boot_sector fbs;

struct fat_boot_fsinfo fsinfo;

struct msdos_dir_entry dentry;

U32 *fat32 = NULL; // kopjoni tabelën FAT32 këtu

Përmasat e sektorit U16; // madhësia e sektorit (nga FAT32)

U16 dir_hyrjet; // 0 për FAT32

Sektorët U16; // numri i sektorëve në ndarje

U32 yndyrë32_madhësi; // Madhësia FAT32

U32 data_start; // fillimi i zonës së të dhënave

U16 byte_per_cluster; // sa bajt janë në grup (madhësia e grupit në bajt)

U32 grupi i ardhshëm; // grupi tjetër në zinxhir

U32 root_cluster; // Cluster ROOT - grup fillestar i direktoriumit rrënjë

U8 *dir_hyrja = NULL; // tregues për hyrjet e drejtorisë

U64 start_seek = 0; // nisja e zhvendosjes në ndarje (në bajt)

Funksioni kryesor:

int main()

Int num = 0;

Int cluster_num = 5; // sa grupe për të lexuar nga skedari

U8 *full_path = "/Folder1/Folder2/readme"; // skedar për të lexuar

Ne hapim pajisjen, marrim informacion në lidhje me tabelën e ndarjeve në pajisje dhe shfaqim informacione rreth ndarjeve:

I fortë = i hapur (DEV_NAME, O_RDONLY);

Nëse (e vështirë< 0) {

Gabim (DEV_NAME);

Dalje (-1);

Nëse (get_pt_info (e vështirë)< 0) {

Gabim ("get_pt_info");

Dalje (-1);

Show_pt_info();

Ne llogarisim kompensimin fillestar të ndarjes:

Fillimi_kërkimi = (__u64)(pt_t.sect_para) * 512;

Lexoni grupet që i përkasin skedarit:

Num = fat32_read_file (rruga_plotë, grup_num);

Nëse (num< 0) perror("fat32_read_file");

Else printf("Lexo %d grupe\n", num);

Mbyll (e vështirë);

Kthimi 0;

Informacioni rreth tabelës së ndarjes lexohet nga funksioni get_pt_info():

int get_pt_info (int e vështirë)

Int i = 0;

U64 kërkoj;

Ne lexojmë tabelën e ndarjes nga MBR dhe kontrollojmë nënshkrimin:

Read_main_ptable (e vështirë);

Nëse (shenjë_kontrolloni ()< 0) {

Printf("Nënshkrimi i pavlefshëm!\n");

Kthimi -1;

Ne jemi duke kërkuar për identifikuesin e seksionit të zgjeruar. Nëse ka një të tillë, ne llogarisim kompensimin në ndarjen e zgjeruar dhe lexojmë informacione rreth disqeve logjike:

për (; i< 4; i++) {

Nëse((pt_t[i].lloj_pjese == 0xF) || \

(pt_t[i].lloj_pjese == 0x5) || \

(pt_t[i].lloj_pjese == 0x0C)) (

Kërko = (__u64)pt_t[i].sekt_para * 512;

Read_ext_ptable (e vështirë, kërko);

Pushim;

Kthimi 0;

Funksioni i leximit të tabelës së ndarjes read_main_ptable():

void read_main_ptable (int vështirë)

Nëse (lexo (e vështirë, mbr, 512)< 0) {

Perror ("lexo");

Mbyll (e vështirë);

Dalje (-1);

Memset((void *)pt_t, 0, (PT_SIZE * 4));

Memcpy((void *)pt_t, mbr + 0x1BE, (PT_SIZE * 4));

Kthimi;

Funksioni i kontrollit të nënshkrimit check_sign():

int check_sign()

Shenja U16 = 0;

Memcpy((void *)&shenjë, (void *)(mbr + 0x1FE), 2);

#ifdef DEBUG

Printf("Nënshkrimi - 0x%X\n", shenjë);

#përfundim

Nëse(shenjë != NENSHKRIMI) ktheje -1;

Kthimi 0;

Funksioni i leximit të tabelës së ndarjes së zgjeruar:

void read_ext_ptable (int vështirë, __u64 kërko)

Int num = 4; // duke u nisur nga ky pozicion, grupi i strukturave pt_t do të mbushet me informacione rreth disqeve logjike

U8 smbr;

Fut te dhenat:

  • vështirë– përshkruesi i skedarit të pajisjes;
  • kerkoj– zhvendosja në ndarjen e zgjeruar nga fillimi i diskut (në bajt).

Për të marrë informacion në lidhje me disqet logjike, ne organizojmë një lak:

Për(;;num ++) (

Ne lexojmë SMBR, e vendosur në zhvendosjen e kërkimit nga fillimi i diskut:

Memset((void *)smbr, 0, 512);

Pread64 (hard, smbr, 512, kërko);

Plotësojmë dy elementë të tabelës pt_t, duke filluar nga pozicioni nr. Elementi i parë do të tregojë në diskun logjik, dhe i dyti do të tregojë strukturën e mëposhtme SMBR:

Memset((void *)&pt_t, 0, PT_SIZE * 2);

Memcpy((void *)&pt_t, smbr + 0x1BE, PT_SIZE * 2);

Ne bëjmë një ndryshim në fushën "Numri i sektorit të fillimit" - numërimi është nga fillimi i diskut:

Pt_t.sect_para += (kërkoj / 512);

Nëse kodi i llojit të ndarjes është zero, atëherë nuk ka më disqe logjike:

Nëse(!(pt_t.lloj_pjese)) thyej;

Ne llogarisim kompensimin në SMBR-në e mëposhtme:

Kërko = ((__u64)(pt_t.sek_para + pt_t.sekt_gjithsej)) * 512;

Kthimi;

Funksioni show_pt_info() shfaq informacione rreth disqeve logjike të gjetura në pajisje:

void show_pt_info()

Int i = 0, n;

#ifdef DEBUG

Printf("Numri i ndarjeve në disk është %d\n", PART_NUM);

#përfundim

Për (; i< MAX_PART; i++) {

If(!pt_t[i].type_pjese) thyej;

Printf("\nLloji i ndarjes %d - ", i);

Për(n = 0; n< PART_NUM; n++) {

If(pt_t[i].type_part == i386_sys_types[n].part_type) (

Printf("%s\n", i386_sys_types[n].emri i pjesës);

Pushim;

If(n == PJESA_NUM) printf("lloji i panjohur\n");

Printf("Shenja e nisjes - 0x%X\n", pt_t[i].bootable);

Printf("Sektorët në ndarjen %d - %d\n", i, pt_t[i].sect_total);

Printf("Sektori para ndarjes %d - %d\n\n", i, pt_t[i].sect_para);

Kthimi;

Leximi i grupeve të skedarëve nga një ndarje FAT32 kryhet nga funksioni fat32_read_file(). Ky funksion ka shumë të përbashkëta me funksionin fat16_read_file(), prandaj ju lutemi referojuni pikës 6 për komente të hollësishme:

int fat32_read_file(__u8 *rruga e plotë, int num)

Struktura split_name sn;

U8 tmp_emri_buff;

Int i = 1, n;

U32 start_cluster, next_cluster;

U8 *tmp_buff;

Operacionet përgatitore - ne pastrojmë tampon, strukturën dhe kontrollojmë prerjen e parë:

Memset(tmp_name_buff, 0, SHORT_NAME);

Memset((void *)&sn, 0, sizeof(struct split_name));

If(full_path != "/") kthen -1;

Leximi i sektorit të nisjes:

If(read_fbs()< 0) return -1;

Memcpy((void *)&size_size, (void *)fbs.sector_size, 2);

Memcpy((void *)&dir_entries, (void *)fbs.dir_entries, 2);

Memcpy((void *)&sektorët, (void *)fbs.sektorët, 2);

Ne lexojmë strukturën FSIinfo dhe shfaqim nënshkrimin e vendosur në të:

If(read_fs_info()< 0) return -1;

Printf("Nënshkrimi1 - 0x%X\n", fsinfo.signature1);

Printf("Signature2 - 0x%X\n", fsinfo.signature2);

Fat32_size = fbs.fat32_length * 512; // Madhësia FAT32 në bajt

Data_start = 512 * fbs.reserved + fat32_size * 2; // fillimi i fushës së të dhënave

Byte_per_cluster = fbs.grup_madhësi * 512; // madhësia e grupit në bajt

Root_cluster = fbs.root_cluster; // numri i grupit të drejtorisë rrënjësore

Leximi i FAT32:

If(read_fat32()< 0) return -1;

Shpërndarja e memories për hyrjet në direktori:

Dir_hyrja = (__u8 *)malloc(byte_per_cluster);

Nëse(!dir_hyrja) kthen -1;

Leximi i drejtorisë rrënjësore:

Nëse (read_directory (root_cluster)< 0) return -1;

Ne analizojmë rrugën e plotë të skedarit dhe ndajmë çdo element në përbërësit e tij:

Ndërsa (1) (

Memset(tmp_name_buff, 0, SHORT_NAME);

Memset((void *)&sn, 0, sizeof(struct split_name));

Për(n = 0; n< SHORT_NAME; n++, i++) {

Tmp_emri_buff[n] = shteg_plotë[i];

If((tmp_name_buff[n] == "/") || (tmp_name_buff[n] == "\0")) (

I++;

Pushim;

Tmp_name_buff[n] = "\0";

If(split_name(tmp_name_buff, &sn)< 0) {

Printf("emri i pavlefshëm\n");

Kthimi -1;

Nëse (get_dentry(&sn)< 0) {

Printf ("Nuk ka skedar të tillë!\n");

Kthimi -1;

Për të marrë numrin fillestar të një grupi në sistemin e skedarëve FAT32, duhet të përdorni fjalën më të lartë të numrit të grupit të parë të skedarit - fushën starthi të strukturës së dhëmbëve:

Start_cluster = ((__u32)dentry.starthi<< 16) | dentry.start);

Kontrollimi i bajtit të atributit:

If(dentry.attr & 0x10) ( // kjo është drejtoria

Nëse (read_directory (start_cluster)< 0) return -1;

Vazhdo;

If(dentry.attr & 0x20) ( // dhe ky është një skedar

Tmp_buff = (__u8 *)malloc(byte_per_cluster);

N = hapur ("grup", O_CREAT|O_RDWR, 0600);

Nëse (n< 0) {

Perror ("i hapur");

Kthimi -1;

Printf("grupi i parë i skedarit - 0x%X .. ", start_cluster);

Për (i = 0; i< num; i++) {

Memset(tmp_buff, 0, byte_per_cluster);

If(read_cluster(start_cluster, tmp_buff)< 0) return -1;

Nëse (shkruaj (n, tmp_buff, byte_per_cluster)< 0) {

Perror ("shkruaj");

Kthimi -1;

Nëse (grupi_tjetër == EOF_FAT32) (

Falas (tmp_buff);

Mbyll(n);

Kthimi ++i;

Start_cluster = grupi_tjetër;

Kthimi i;

Qëllimi i tre funksioneve të ardhshme është të marrin përmbajtjen e zonës së sistemit, d.m.th. sektori i nisjes, struktura FSIinfo dhe tabela FAT32:

1) funksioni read_fbs() lexon sektorin e nisjes:

int read_fbs()

If(pread64(hard, (__u8 *)&fbs, sizeof(fbs), start_seek)< 0) return -1;

Kthimi 0;

2) funksioni read_fs_info() lexon strukturën FSIinfo:

int read_fs_info()

U64 seek = (__u64)fbs.info_sector * 512 + start_seek;

If(pread64(hard, (__u8 *)&fsinfo, sizeof(fsinfo), kërko)< 0) return -1;

Kthimi 0;

3) funksioni read_fat32() lexon tabelën FAT32:

int read_fat32()

U64 seek = (__u64)fbs.reserved * 512 + start_seek;

Fat32 = (i pavlefshëm *) malloc (fat32_size);

Nëse(!fat32) kthen -1;

If(pread64(hard, (__u8 *)fat32, fat32_size, search)< 0) return -1;

Kthimi 0;

Funksioni read_cluster() lexon grupin me numrin e specifikuar:

int read_cluster (__u32 cluster_num, __u8 *tmp_buff)

U64 seek = (__u64)(byte_per_cluster) * (cluster_num - 2) + data_start + start_seek;

If (pread64 (hard, tmp_buff, byte_per_cluster, seek)< 0) return -1;

Kthimi 0;

Funksioni read_directory() përdoret për të lexuar direktoritë (duke përfshirë direktoriumin rrënjë):

int read_directory (__u32 start_cluster)

Int i = 2;

U32 grupi i ardhshëm;

Parametrat e funksionit janë grupi fillestar i drejtorisë. Ne lexojmë përmbajtjen e drejtorisë në tampon global dir_entry:

If(read_cluster(start_cluster, dir_entry)< 0) return -1;

Tjetër_grup = yndyrë32;

Nëse drejtoria zë një grup, dilni; nëse jo, rritni madhësinë e kujtesës dhe vazhdoni të lexoni:

Për (; ;i++) (

Start_cluster = grupi_tjetër;

Dir_hyrja = (__u8 *)realloc(dir_hyrja, i * byte_per_cluster);

Nëse(!dir_hyrja) kthen -1;

If(read_cluster(start_cluster, (dir_hyrja + (i - 1) * byte_per_cluster))< 0) return -1;

Tjetër_grup = yndyrë32;

Nëse((grupi_tjetër == EOF_FAT32) || (grupi_tjetër == 0xFFFFFF8)) kthen 0;

Kthimi 0;

Funksioni i fundit që do të shikojmë kërkon përmbajtjen e një drejtorie për një element që përputhet me skedarin që po kërkojmë:

int get_dentry (struct split_name *sn)

Int i = 0;

Treguesi dir_entry vendoset në një zonë të memories që përmban një sërë hyrjesh të drejtorisë në të cilën do të kërkojmë skedarin (ose direktorinë). Për të kërkuar, ne organizojmë një cikël dhe vendosim rekordin e gjetur në strukturën globale të dhëmbëve:

Për(;;i++) (

Memcpy((void *)&dentry, dir_hyrja + i * sizeof(dentry), sizeof(dentry));

If(!(memcmp(dentry.name, sn->emri, sn->emri_len)) &&

!(memcmp(dentry.ext, sn->ext, sn->ext_len)))

Pushim;

Nëse(!dentry.name) kthen -1;

Kthimi 0;

Kjo përfundon rishikimin tonë të modulit për leximin e një skedari nga një ndarje FAT32.

Kodi burimor për modulin gjendet në direktorinë FAT32, skedari fat32.c.

Dallimet në organizimin e ruajtjes së të dhënave të skedarëve në drejtoritë për sistemet e skedarëve FAT dhe EXT2

Disa fjalë për ndryshimet në organizimin e ruajtjes së të dhënave të skedarëve në drejtoritë për sistemet e skedarëve FAT dhe EXT2. Struktura e sistemit të skedarëve EXT2 u diskutua në.

Sapo u njohëm me FAT - në të, të gjithë elementët e drejtorisë kanë një vlerë fikse. Kur krijohet një skedar, drejtuesi i sistemit të skedarëve kërkon pozicionin e parë të pazënë dhe e plotëson atë me informacione rreth skedarit. Nëse gjatësia e drejtorisë nuk përshtatet në një grup, atëherë një grup tjetër ndahet për të, etj.

Le të shohim se si janë gjërat në EXT2.

Le të themi se kemi një ndarje me sistemin e skedarëve EXT2, madhësia e bllokut është 4096 bajt. Në këtë seksion ne krijojmë një direktori. Madhësia e drejtorisë do të jetë e barabartë me madhësinë e bllokut - 4096 bajt. Në një direktori, sistemi operativ krijon menjëherë dy hyrje - një hyrje për direktoriumin aktual dhe një hyrje për drejtorinë prind. Hyrja e drejtorisë aktuale do të marrë 12 bajt, ndërsa hyrja e prindit do të jetë 4084 bajt. Le të krijojmë një skedar në këtë direktori. Pas kësaj, do të ketë tre hyrje në drejtori - një hyrje e drejtorisë aktuale me një gjatësi prej 12 bajte, një hyrje e drejtorisë mëmë me një gjatësi prej 12 bajte dhe një hyrje e skedarit të krijuar me një gjatësi prej, siç ndoshta e keni marrë me mend, 4072 bajt. Nëse fshijmë skedarin e krijuar, gjatësia e hyrjes së direktoriumit prind rritet përsëri në 4084 byte.

Kështu, kur krijoni një skedar, drejtuesi i sistemit të skedarëve EXT2 kërkon hyrjen e gjatësisë maksimale në drejtori dhe e ndan atë, duke krijuar hapësirë ​​për një hyrje të re. Epo, nëse ende nuk ka hapësirë ​​të mjaftueshme, një bllok tjetër ndahet për drejtorinë dhe gjatësia e drejtorisë bëhet 8192 bajt.

Dhe në përfundim, një redaktim i vogël në artikullin "Arkitektura e sistemit të skedarëve EXT2".

Ky ndryshim ka të bëjë me funksionin get_i_num() për përcaktimin e numrit inode sipas emrit të skedarit. Versioni i vjetër i këtij funksioni dukej kështu:

int get_i_num (char *emri)

Int i = 0, rec_len = 0;

Struktura ext2_dir_entry_2 dent;

Për (; i< 700; i++) {

If(!memcmp(dent.emri, emri, dent.name_len)) break;

Rec_len += dent.rec_len;

Return dent.inode;

Versioni i korrigjuar:

int get_i_num (char *emri)

* Parametri i funksionit është emri i skedarit. Vlera e kthyer është numri inode i skedarit.

Int rec_len = 0;

Struktura ext2_dir_entry_2 dent; // kjo strukturë përshkruan formatin e hyrjes së direktoriumit rrënjë:

* Buffer global buffer përmban një sërë hyrjesh në drejtori. Për të përcaktuar numrin serial të skedarit inode, duhet të gjeni

* në këtë grup ka një hyrje me emrin e këtij skedari. Për ta bërë këtë, ne organizojmë një lak:

per(;;) (

/* Kopjoni hyrjet e drejtorisë në strukturën e dhëmbëzuar: */

Memcpy((void *)&dent, (buff + rec_len), sizeof(dent));

* Një gjatësi emri i skedarit zero do të thotë se ne kemi përsëritur mbi të gjitha hyrjet e drejtorisë

* dhe nuk u gjet asnjë hyrje me emrin e skedarit tonë. Pra, është koha për t'u kthyer:

Nëse(!dent.name_len) kthen -1;

/* Kërkimi kryhet duke krahasuar emrat e skedarëve. Nëse emrat përputhen, ne dalim nga cikli: */

If(!memcmp(dent.emri, emri, strlen(emri))) break;

/* Nëse emrat nuk përputhen, kaloni në hyrjen tjetër: */

Rec_len += dent.rec_len;

/* Nëse ka sukses, ktheni numrin inode të skedarit: */

Return dent.inode;

Literatura:

  1. V. Kulakov. Programimi në nivelin e harduerit: një libër i veçantë referimi. botimi i 2-të. / – Shën Petersburg: Pjetri, 2003 – 848 f.
  2. A.V.Gordeev, A.Yu.Molchanov. Softueri i sistemit / – Shën Petersburg: Peter – 2002
  3. Meshkov V. Arkitektura e sistemit të skedarëve ext2. – Revista “System Administrator”, Nr.11(12), Nëntor 2003 – 26-32 f.

Në kontakt me

Lexoni rreth sistemeve të skedarëve në këtë artikull.

Sistemi i menaxhimit të skedarëve është kryesori në shumicën dërrmuese të sistemeve operative moderne. Të gjitha sistemet operative moderne përdorin skedarë dhe softuer përkatës për të punuar me ta. Fakti është se, së pari, shumë programe të përpunimit të sistemit komunikojnë përmes sistemit të skedarëve duke përdorur të dhëna. Së dyti, me ndihmën e këtij sistemi zgjidhen problemet e shpërndarjes së centralizuar të hapësirës në disk dhe menaxhimit të të dhënave. Së fundi, përdoruesit kanë mënyra më të lehta për të hyrë në të dhënat e tyre të ruajtura në pajisjet e ruajtjes së jashtme.

Ekziston një numër i madh i sistemeve të skedarëve të krijuar për pajisje të ndryshme memorie të jashtme dhe sisteme të ndryshme operative. Ata përdorin, në përputhje me rrethanat, parime të ndryshme për vendosjen e të dhënave në medium. Këto sisteme janë FAT, FAT32 dhe NTFS.

Mund të themi se qëllimi kryesor i sistemit të skedarëve dhe sistemit të tij përkatës të menaxhimit të skedarëve është të sigurojë akses të përshtatshëm në të dhënat e organizuara në formën e skedarëve, domethënë, në vend të aksesit të nivelit të ulët në të dhëna që tregojnë adresat specifike fizike të regjistrimit. ne kemi nevojë, përdoret qasja logjike duke treguar emrin e skedarit dhe regjistrimin në të.

Sistemi i skedarëve FAT (Tabela e shpërndarjes së skedarëve) e merr emrin nga një tabelë e thjeshtë që specifikon:

  • seksione të adresueshme drejtpërdrejt të diskut logjik, të ndara për vendosjen e skedarëve ose fragmenteve të tyre në to; o zona të lira të hapësirës në disk;
  • zonat e dëmtuara të diskut (këto zona përmbajnë zona të dëmtuara dhe nuk garantojnë leximin dhe shkrimin e të dhënave pa gabime).

Në sistemin e skedarëve FAT, hapësira e diskut e çdo disku logjik ndahet në dy zona (Fig.) zona e sistemit Dhe zona e të dhënave.

Zona e sistemit të një disku logjik krijohet dhe inicializohet gjatë formatimit, dhe më pas përditësohet kur punoni me strukturën e skedarit. Zona e të dhënave të një disku logjik përmban skedarë të rregullt dhe skedarë direktori; këto objekte formojnë një hierarki të varur nga direktoria rrënjësore. Elementi i drejtorisë përshkruan një objekt skedari, i cili mund të jetë ose një skedar i rregullt ose një skedar drejtorie. Zona e të dhënave, ndryshe nga zona e sistemit, është e aksesueshme përmes ndërfaqes së përdoruesit të sistemit operativ. Zona e sistemit përbëhet nga komponentët e mëposhtëm (të vendosur njëri pas tjetrit në hapësirën logjike të adresave):

  • boot record (Boot Record, BR);
  • sektorët e rezervuar (Sektorët e Rezervuar, ResSec);
  • tabelat e ndarjes së skedarëve (Tabela e ndarjes së skedarëve, FAT);
  • direktoria rrënjësore (Root Directory, Rdir).

Tabela e ndarjes së skedarëve është një strukturë shumë e rëndësishme informacioni. Mund të themi se është një hartë adresash e zonës së të dhënave, e cila përshkruan gjendjen e çdo seksioni të zonës së të dhënave dhe përkatësinë e saj në një objekt të caktuar skedari,

E gjithë zona e të dhënave është e ndarë në të ashtuquajturat grupime. Një grup është një ose më shumë sektorë ngjitur në hapësirën logjike të adresave të diskut (më saktë, vetëm në zonën e të dhënave). Një grup është njësia më e vogël e adresueshme e memories së diskut e alokuar në një skedar (ose direktorium jo-root). Grupet janë futur për të zvogëluar numrin e njësive të adresueshme në zonën e të dhënave të një disku logjik.

Çdo skedar zë një numër të plotë grupimesh. Në këtë rast, grupi i fundit mund të mos përdoret plotësisht, gjë që, me një madhësi të madhe grupi, mund të çojë në një humbje të dukshme të hapësirës në disk. Në disketat, një grup zë një ose dy sektorë, dhe në disqet e ngurtë madhësia e tij varet nga madhësia e ndarjes. Në tabelën FAT, grupimet që i përkasin të njëjtit skedar (ose skedar drejtorie) janë të lidhura në zinxhirë. Sistemi i skedarëve FAT16 përdor një fjalë 16-bit për të specifikuar numrin e grupit, kështu që mund të keni deri në 2 16 = 65,536 grupime (të numëruara nga 0 në 65,535).

Meqenëse skedarët në disk ndryshohen (fshihen, zhvendosen, rriten ose pakësohen), rregulli i përmendur i ndarjes së grupit të parë të lirë për një pjesë të re të të dhënave çon në copëzimi skedarët, d.m.th., të dhënat e një skedari mund të mos jenë të vendosura në grupime ngjitur, por ndonjëherë në ato shumë të largëta nga njëri-tjetri, duke formuar zinxhirë komplekse. Natyrisht, kjo çon në një ngadalësim të konsiderueshëm të punës me skedarë.

Për shkak se tabela FAT përdoret shumë intensivisht gjatë aksesit në disk, zakonisht ngarkohet në RAM (në buferat I/O ose cache) dhe qëndron atje për aq kohë sa të jetë e mundur. Nëse tabela është e madhe dhe cache e skedarit është relativisht e vogël, vetëm fragmentet e tabelave të aksesuara së fundmi ruhen në memorie.

Kushdo që ka instaluar ndonjëherë një sistem operativ ka hasur në faktin se në fazën e formatimit të ndarjes së instalimit të hard drive, programi ju kërkon të zgjidhni llojin e sistemit të skedarëve FAT ose NTFS.

Dhe ata që u ndodhi të formatonin një flash drive ose një pajisje tjetër ruajtjeje të jashtme, duhej të vendosnin midis tre sistemeve të skedarëve: FAT32, NTFS dhe exFAT. Më shpesh, përdoruesit zgjedhin formatimin e paracaktuar sepse nuk e dinë se cili është ndryshimi.

Ky artikull u drejtohet atyre që duan të plotësojnë këtë boshllëk në njohuritë e tyre.

Struktura e skedarit FAT: parimet dhe qëllimi

Struktura e skedarit ose Sistemi i skedarëve u zhvillua në vitet 70 të shekullit të kaluar nga Microsoft dhe përfaqësonte një procedurë të caktuar për organizimin e hapësirës për ruajtjen dhe aksesin e të dhënave në kompjuterë dhe pajisje të tjera dixhitale.

Qëllimi i funksionalitetit është t'i sigurojë përdoruesit një menaxhim të përshtatshëm të informacionit të ruajtur në një disk ose vegël të jashtme. Sistemi i skedarëve përfshin skedarë, dosje dhe direktori, si dhe një grup mjetesh të sistemit që ndërveprojnë me to për të kryer funksionet e leximit-shkrimit, krijimit-fshirjes, kopjimit, emërtimit, etj. Përveç kësaj, kjo strukturë organizon aksesin e përbashkët në informacion midis përdoruesve dhe siguron mbrojtje kundër veprimeve të paautorizuara përmes enkriptimit, funksionimit në modalitetin vetëm për lexim, etj.

Strukturisht, e gjithë zona e hapësirës së diskut është e ndarë në grupe, si një fletë letre me kuadrate. Çdo qelizë është një bllok, madhësia e të cilit vendoset gjatë formatimit dhe duhet të jetë shumëfish i 2. Madhësia minimale mund të jetë 512 bajt (për një flash drive), për një hard disk është 32 KB. Një skedar mund të zërë disa grupime të tilla. Mund ta imagjinoni në mënyrë figurative hapësirën e diskut si një fletore, ku grupi është një shkronjë, skedari është një fjalë dhe struktura e skedarit është tabela e përmbajtjes së fletores.

Kur aksesoni një skedar, sistemi operativ duhet ta gjejë atë në disa grupe të vendosura në vende të ndryshme në disk, duke formuar kështu një zinxhir grupimesh. Çdo grup ka etiketën e vet, e cila e identifikon atë si një nga tre llojet:

  1. Falas, gati për të regjistruar të dhëna.
  2. Busy, i cili ruan një pjesë të informacionit dhe ka në etiketë të dhëna për grupin e radhës në zinxhir, ndërsa ky i fundit shënohet me një etiketë të veçantë.
  3. Blloku BAD është një grup me gabime që nuk është më i aksesueshëm pas formatimit.

Madhësia e etiketës përcaktohet nga lloji i strukturës së skedarit: për FAT32 është 32 bajt.

I gjithë sistemi i skedarëve përbëhet nga pjesët e mëposhtme:

  • sektori i nisjes, i cili ndodhet në fillim të diskut, aktivizohet pasi OS të niset dhe ruan parametrat e ndarjes;
  • një tabelë e ndarjes së skedarëve (“tabela e përmbajtjes”) që ruan etiketat e grupeve;
  • kopjet e tabelës së ndarjes së skedarëve për të rikuperuar të dhënat nëse struktura e skedarit është dëmtuar;
  • direktoria rrënjësore;
  • zonat e të dhënave;
  • cilindër për të kryer operacionet e leximit/shkrimit.

Ekzistojnë tre lloje të sistemeve të skedarëve FAT: FAT12, FAT16 dhe FAT32. FAT është zëvendësuar nga NTFS, dhe exFAT është një version i zgjeruar i FAT32 dhe përdoret kryesisht për disqet flash.

Avantazhet dhe disavantazhet e strukturave të skedarëve FAT32, NTFS dhe exFAT

Për të vendosur për zgjedhjen e sistemit më optimal të skedarëve për formatim, ne do të shqyrtojmë përshkrimet e të tre opsioneve, duke u fokusuar në avantazhet dhe disavantazhet e secilit.

FAT32

Ndër tre strukturat e skedarëve të konsideruar, FAT32 është më i vjetri. Ai zëvendësoi FAT16 dhe deri vonë ishte më progresivi. Lëshimi i FAT32 ishte koha që të përkonte me lëshimin e sistemit operativ Windows 95 OSR2 në 1996. Karakteristikat kryesore dalluese: adresimi i grupit 32-bit dhe kufizimet e madhësisë: një skedar jo më shumë se 4 GB dhe një vëllim prej 128 GB.

Përparësitë

Megjithë disa prapambetje morale, FAT32 ka një sërë përparësish mbi sistemet e tjera të skedarëve. Tërheqja e tij kryesore është përputhshmëria dhe shkathtësia. FAT32 funksionon me të gjitha versionet e sistemeve operative, duke përfshirë Windows (krahasimi i të gjitha versioneve), Linux dhe MacOS, dhe është i përshtatshëm për çdo konsol lojërash dhe pajisje të tjera me një portë USB. Sot përdoret në të gjitha disqet e jashtme (flash disqet, kartat CD) si parazgjedhje, pasi shumë pajisje të vjetra: PC, laptopë, set-top kuti me hyrje USB mund të punojnë vetëm me FAT32.

Përparësi të tjera të rëndësishme të sistemit të skedarëve janë: performanca me shpejtësi të lartë, kërkesat e ulëta për sasinë e RAM-it, puna produktive me skedarë të mesëm dhe të vegjël dhe konsumimi i ulët i diskut për shkak të lëvizjeve më të vogla të kokës. Sidoqoftë, ai gjithashtu i nënshtrohet fragmentimit, dhe defragmentimi periodik definitivisht nuk do të dëmtojë.

Të metat

Disavantazhi kryesor i këtij sistemi skedarësh është kufizimi i madhësisë së tij. Për grupet, nuk mund të jetë më shumë se 64 KB, përndryshe disa aplikacione mund të llogarisin gabimisht hapësirën në disk.

Madhësia e skedarit nuk duhet të kalojë 4 GB, kështu që madhësia maksimale e diskut për një madhësi grupi për një tabelë të ndarjes së skedarëve 32 KB do të ishte rreth 8 TB.

Kur formatoni një disk duke përdorur ScanDisk, i cili është një program 16-bit, duke marrë parasysh vetë tabelat FAT dhe me një madhësi maksimale të grupit prej 32 KB, madhësia e vëllimit është e kufizuar në 128 gigabajt.

Duke marrë parasysh që jo shumë pajisje kompjuterike janë të pajisura me një hard disk më të madh se 8 TB, kjo pengesë nuk do të jetë e dukshme për shumicën e përdoruesve. Sidoqoftë, fakti që FAT32 funksionon me skedarë deri në 4 GB është një disavantazh i rëndësishëm, pasi shumica e skedarëve video me cilësi të lartë në formatin modern 4K sot janë më të mëdhenj se këto 4 GB, dhe për këtë arsye nuk janë në përputhje me këtë sistem skedarësh.

Përveç kufizimeve të madhësisë, FAT32 ka edhe disavantazhe të tjera. Nuk mbështet emra të gjatë të skedarëve, gjë që nuk është shumë e përshtatshme për përdoruesit që duan të identifikojnë skedarët në mënyrë logjike bazuar në përmbajtjen e tyre. Ka ankesa për sistemin e sigurisë (një skanues shtesë antivirus nuk do të dëmtonte) dhe mbrojtjen e skedarëve në rast të dështimeve (veçoritë e disqeve të ngurtë), si dhe shpejtësi të ulët kur punoni me drejtoritë që përmbajnë shumë skedarë.

Kështu, FAT32 është më i përshtatshëm për pajisje portative, me kapacitet të ulët dhe kompjuterë të vjetër. Versionet e fundit të Windows nuk mund të instalohen më në një disk të formatuar me sistemin FAT32; është i nevojshëm riformatimi në NTFS.

Përdorimi kryesor i sistemit të skedarëve FAT32 sot është në disqet portative flash dhe karta SD (veçori), të cilat përmbajnë pak skedarë dhe janë të pajtueshëm me një sërë pajisjesh dixhitale.

NTFS

Ky sistem skedari u zhvillua nga Microsoft në 1993 dhe u prezantua me Windows NT 3.1. Në vetë titullin sistemi i skedarëve të teknologjisë së re, që do të thotë sistemi i skedarëve të teknologjisë së re, qëndron thelbi i saj progresiv.

Pas formatimit të një disku në NTFS, ai ndahet në tre zona:

  • MFT - zona ose tabela e skedarëve të përgjithshëm (Master File Table), ku ruhen informacionet për skedarët dhe drejtoritë;
  • të dhënat e përdoruesit;
  • metafiles që përmbajnë informacione shërbimi.

Secili prej metafiles është përgjegjës për një zonë të caktuar. Për shembull, LogFile është një skedar logimi në të cilin të gjitha operacionet regjistrohen në regjistër, Boot është sektori i nisjes, Bitmap kontrollon hapësirën e lirë në ndarje, etj. Kjo strukturë mbron me besueshmëri skedarët nga çdo dështim, qofshin ngrirjet e sistemit operativ ose ndërprerjet e energjisë.

Përparësitë

Ndryshe nga FAT32, kjo strukturë skedari praktikisht nuk ka kufizime në madhësinë e skedarëve dhe drejtorive. Madhësia e grupit mund të ndryshojë nga 512 bajt në 64 KB, me madhësinë optimale 4 KB.

Falë shumë përmirësimeve të rëndësishme për të përmirësuar sigurinë, si mbështetja për të drejtat e aksesit të skedarëve, kuotat e HPFS, enkriptimi, regjistrimi i ditarit, kontrolli dhe auditimi i aksesit, lidhjet e forta, etj., NTFS është ideal për formatimin e një disku për zonën e sistemit. Ndarjet e tjera të diskut mund të formatohen gjithashtu në këtë sistem, pasi NTFS lejon përdorimin optimal të hapësirës në disk kur ka shumë skedarë të vegjël.

Avantazhi i këtij organizimi të skedarëve është shpejtësia e shpejtë e aksesit në skedarë të vegjël, performanca e lartë kur punoni me skedarë të mëdhenj dhe aftësia për të përdorur emra të gjatë të skedarëve.

Të metat

Disavantazhi kryesor i sistemit NTFS është papajtueshmëria e tij me të gjitha sistemet operative nën Windows NT, si dhe kufizimet në përputhshmërinë me sistemet e tjera operative. Pra, Mac OS lexon skedarë nga disqet NTFS, por nuk mund t'i shkruajë ato, e njëjta situatë me pajtueshmërinë e skedarëve Linux. Konsolat më të njohura të lojërave Playstation dhe Xbox 360 nuk funksionojnë me NTFS, vetëm Xbox One mund të ndërveprojë me të.

Disavantazhet e NTFS përfshijnë gjithashtu kërkesa të larta RAM, shpejtësi më të ulët në krahasim me FAT32 dhe vështirësi në menaxhimin e drejtorive me madhësi mesatare.

Kështu, është më e këshillueshme që të përdorni strukturën e skedarit NTFS në disqet e ngurtë, duke përfshirë SSD, duke ekzekutuar versionet më të fundit të Windows, duke filluar me NT.

exFAT

Ky sistem skedarësh është i fundit që është rishikuar për sa i përket kohës së lëshimit. Ai u shfaq në 2008 me përditësime të rregullta të Windows XP dhe është, në fakt, një version i zgjeruar i FAT32.

Qëllimi kryesor i zhvilluesve është të krijojnë një strukturë skedari produktive, të përshtatshëm dhe universal për pajisjet e ruajtjes portative: disqet flash, karta SD dhe disqe të lëvizshëm.

Përparësitë:

  • Organizim i thjeshtë pa veçori të specializuara dhe kufizime në madhësinë e skedarëve dhe ndarjeve.
  • Përputhshmëri e shkëlqyer me të gjitha sistemet operative Windows, si dhe Mac OS dhe Linux. Në opsionin e fundit, kërkohet instalimi i softuerit shtesë.
  • Mbështetje nga të gjitha pajisjet moderne të Apple, si dhe konzolat e lojërave Xbox One dhe Playstation 4.

Disavantazhi kryesor i organizimit të skedarëve exFAT është politika e licencimit të Microsoft, e cila ndalon përdorimin e tij falas në domenin publik.

Struktura më optimale e skedarit

Duke marrë parasysh përshkrimet e tre sistemeve të skedarëve të njohur, mund të nxjerrim përfundimet e mëposhtme:

  • për pajisjet kompjuterike me një sistem operativ më të lartë se Windows NT, do të ishte më e përshtatshme të formatoni hard diskun në sistemin NTFS;
  • për pajisjet më të vjetra, si dhe për qëllimin e pajtueshmërisë me pajisje të ndryshme dixhitale moderne, opsioni më i mirë do të ishte të zgjidhni FAT32;
  • për çdo media të lëvizshme do të ishte ideale të përdoret sistemi

Dhe së fundi: informacioni se çfarë strukture skedari është implementuar në disqet tuaja mund të gjendet në skedën "Të përgjithshme" (butoni i djathtë i miut "Properties").

pershendetje!

Sido që të jetë mediumi i ruajtjes - qoftë ai një hard disk, një disk SSD ose një disk flash (MicroSD, microSDXC, USB-Flash Drive, etj.) të gjithë ata kanë nevojë për një sistem skedarësh që të mund të shkruajnë dhe lexojnë të dhëna prej tyre.

Ekzistojnë një numër i sistemeve të skedarëve, por në këtë artikull do të shohim më të njohurit dhe më të përdorurit përkatësisht.

Informacioni i paraqitur do të jetë shumë i dobishëm në situatat kur duhet të formatoni një hard disk (disk SSD) ose një nga ndarjet e tij, një flash drive, etj.

Sistemi i skedarëve FAT16, FAT32 - historia dhe veçoritë

Le ta fillojmë historinë me sistemin e skedarëve FAT16(quhet edhe thjesht YNDYRA) - u krijua kryesisht për sistemin operativ MS DOS dhe mbështetja e tij ishte në dispozicion në Windows 95 dhe Windows 98. Kufiri maksimal i madhësisë për një skedar të vetëm ishte 2 Gigabajt. Madhësia maksimale e ndarjes mund të jetë saktësisht e njëjtë.

Dominimi i FAT16 nuk zgjati shumë; ai shpejt u zëvendësua nga sistemi i skedarëve FAT32 - ishte standard për Windows 95 dhe Windows 98, megjithëse për arsye të pajtueshmërisë, siç u përmend më lart, këto sisteme operative mbështetën gjithashtu FAT16.

Në FAT32, madhësia maksimale e skedarit ishte tashmë 4 Gigabajt. Ato. numri i skedarëve mund të jetë çdo, por madhësia e ndonjërit prej tyre nuk mund të kalojë 4 Gigabajt. Dhe madhësia maksimale e ndarjes mund të ishte teorikisht 8 Terabajt, por në Windows ishte e kufizuar artificialisht. Për shembull, në Windows 98, madhësia e ndarjes nuk mund të jetë më shumë se 137 Gigabajt.

Natyrisht, mund të pyesni pse, pas kaq shumë vitesh, disqet flash dhe hard disqet e vegjël mund të formatohen në këtë sistem skedarësh. Përgjigja për këtë pyetje është më poshtë.

  • Përputhshmëria: FAT32 ende sot mbështetet gjerësisht nga sistemet kryesore operative: Windows, MacOS, Linux, pajisje të ndryshme të pavarura (set-top boxes, MP3 player, telefona, telefona inteligjentë, etj.) dhe sisteme të integruara.
  • Kufizimet: Nëse përpiqeni të shkruani një skedar, madhësia e të cilit është më e madhe se 4 Gigabajt, nuk do të mund ta bëni këtë dhe do të shfaqet një gabim. Ka zgjidhje për këtë problem.

    Ekzistojnë gjithashtu kufizime në madhësinë e ndarjes - megjithëse FAT32 teorikisht mbështet median e ruajtjes deri në 8 Terabajt, në Windows XP (dhe më vonë) nuk do të mund të formatoni një disk ose ndarje më të madhe se 32 Gigabajt në FAT32. Ky kufizim u prezantua nga Microsoft për të ruajtur performancën optimale kur punoni me këtë sistem skedarësh.

  • Sot, ky sistem skedari përdoret me sukses në disqet flash dhe disqet për të siguruar përputhshmëri maksimale me klasën më të gjerë të pajisjeve.

    Një avantazh tjetër është mungesa e shkrimit/leximit të tepërt të “të dhënave teknike” gjatë ndërveprimit me këtë sistem skedarësh. Për disqet Flash, të cilët kanë një burim të kufizuar leximi/shkrimi për qelizat e memories, ky është padyshim një përfitim.

Sistemi i skedarëve NTFS - përshkrimi, aplikacioni dhe vetitë kryesore

Sistemi i skedarëve NTFS Sot është e rëndësishme dhe e përhapur. Pasi ka debutuar për herë të parë në Windows XP, ai vazhdon të përdoret në të gjitha versionet moderne të Microsoft OS, duke përfshirë Windows 10 më të fundit.

Zhvilluesit e tij bënë çmos, duke e pajisur këtë sistem skedarësh me shumë veçori që diktoheshin nga realitetet moderne. Për shembull, duke regjistruar informacionin teknik të të gjitha operacioneve të skedarëve të kryer, ishte e mundur që të rritet ndjeshëm besueshmëria e sigurisë së të dhënave në rast të një humbjeje të papritur të energjisë në pajisjen e ruajtjes.

Gjithashtu, aftësia për të vendosur leje në skedarë dhe dosje u shtua në NTFS, gjë që përmirëson ndjeshëm sigurinë e përgjithshme kur punoni në Windows. Mos harroni për mundësinë e krijimit të kopjeve hije të skedarëve dhe të dhënave gjatë funksionimit të një sistemi që përdor në mënyrë aktive Windows OS, për të siguruar performancë të lartë gjatë rezervimit të të dhënave, kriptimit dhe thjesht funksionimit normal të sistemit operativ.

Natyrisht, kjo nuk është një listë e plotë e asaj që ofron sistemi modern i skedarëve NTFS.

Siç u përmend më lart, ky sistem skedarësh është standard për Windows XP dhe sistemet operative pasuese të lëshuara nga Microsoft. Gjatë instalimit të sistemit operativ, as nuk do të jeni në gjendje të zgjidhni një sistem skedari - hard disku ose SSD do të formatohen rreptësisht në NTFS.

Për shkak të kompleksitetit të konsiderueshëm të parimeve të funksionimit të sistemit të skedarëve NTFS dhe disa çështjeve të licencimit, ai ka mbështetje shumë të kufizuar nga sistemet dhe pajisjet e tjera operative.

Për shembull, sistemi operativ MacOS mund të lexojë të dhëna vetëm nga media që përdor NTFS, por nuk mund të shkruajë të dhëna në media me këtë sistem skedarësh.

Në Linux situata është më e mirë. Megjithëse Linux-i në mënyrë origjinale mund të lexojë të dhëna vetëm nga media NTFS, disa shpërndarje përfundimtare të Linux shtojnë gjithashtu mbështetje për të shkruar në disqe NTFS.

Sa i përket pajisjeve të pavarura, konzollave të lojërave (Sony PlayStation, Xbox 360), etj., në shumicën e rasteve NTFS nuk mbështetet prej tyre.

  • Përputhshmëria: Mbështetet plotësisht në të gjitha versionet moderne të Microsoft OS. Në Macintosh (MacOS) mbështetet vetëm leximi, por në Linux leximi dhe në disa shpërndarje përfundimtare gjithashtu shkrimi. Sa për pajisjet e tjera, në shumicën e rasteve nuk mbështetet fare.
  • Kufizimet: Nuk ka kufizime në numrin dhe madhësinë e skedarëve dhe dosjeve.
  • Shtrirja optimale e aplikimit: Sistemi i skedarëve u krijua me synimin për t'u përdorur për disqet e ngurtë (dhe më pas SSD), kryesisht në mjedisin Windows.

Sistemi i skedarëve ExFat - çfarë është, pse u krijua

ExYndyrore(e quajtur edhe FAT64) është një sistem skedari që debutoi në vitin 2006, i krijuar për disqet flash. Gjatë zhvillimit të tij, u mor më e mira e FAT32 dhe u eliminuan kufizimet e tij të qenësishme. ExFat nuk ka kufizime në madhësinë maksimale të skedarit që mund të shkruhet në media me një sistem skedari të caktuar.

Situata është përmirësuar edhe më tej me eliminimin e numrit të tepërt të operacioneve teknike të leximit/shkrimit për të siguruar shpejtësi maksimale të operacioneve bazë të skedarëve me një ndikim minimal në qelizat e memories, në mënyrë që të parandalohet dhe vonohet konsumimi i tyre sa më shumë që të jetë e mundur.

Nëse flasim për pajtueshmërinë, atëherë situata me të është shumë më e mirë kur krahasohet me të njëjtin NTFS. MacOS ka mbështetje të plotë për operacionet e leximit/shkrimit, dhe ka gjithashtu mbështetje nga Linux, me kusht që disa paketa të instalohen nga depoja.

Sa i përket pajisjeve të jashtme, situata me mbështetjen e ExFat po përmirësohet, por mbështetja në të gjitha pajisjet nuk është padyshim e garantuar.

  • Përputhshmëria: Ka mbështetje të plotë në Windows, duke filluar me Windows XP, MacOS dhe Linux OS (mund t'ju duhet të instaloni paketën mbështetëse nga depoja).

    Mund të mos mbështetet në pajisjet më të vjetra të pavarura (MP3 player, kamera, etj.).

  • Kufizimet: Ky sistem skedari nuk ka asnjë kufizim as në madhësinë maksimale të skedarit dhe as në numrin e tyre.
  • Shtrirja optimale e aplikimit:Çdo flash drive dhe pajisje ruajtëse (MicroSD, microSDXC, USB Flash Drive, etj.) më të mëdha se 4 GB. Një flash drive me këtë sistem skedarësh do të demonstrojë performancë me shpejtësi të lartë dhe do të zgjasë më shumë sesa nëse përdor NTFS.

Përmbledhje e shkurtër

Për të përmbledhur atë që u tha më lart, rezulton se sistemi i skedarëve NTFS duhet të përdoret për disqet e ngurtë (HDD) dhe disqet SSD të instaluara brenda kompjuterit, dhe ExFat për disqet e jashtme flash.
Dhe FAT32 përdoret në mënyrë optimale për disqet e vogla flash (deri në 4 Gigabajt), si dhe disqet flash që përdoren në pajisjet e vjetra dhe nuk e kuptojnë ExFat.

Kjo eshte e gjitha! Shihemi në materiale të reja! Për të mos i humbur ato, duhet të abonoheni!

FAT - Tabela e ndarjes së skedarëve - ky term i referohet një prej mënyrave për të organizuar një sistem skedarësh në një disk. Kjo tabelë ruan informacionin rreth skedarëve në hard diskun tuaj si një sekuencë numrash që përcaktojnë se ku ndodhet secila pjesë e secilit skedar. Me ndihmën e tij, sistemi operativ zbulon se cilat grupime zë skedari i kërkuar. FAT është sistemi më i zakonshëm i skedarëve dhe mbështetet nga shumica dërrmuese e sistemeve operative. Fillimisht, FAT ishte 12-bit dhe lejonte punën me disketë dhe disqe logjike me një kapacitet jo më shumë se 16 MB. Versioni 3.0 MS-DOS e bëri tabelën FAT 16-bit për të mbështetur disqet më të mëdhenj dhe disqet deri në 2047 GB përdorin një tabelë FAT 32-bit.

Sistemi FAT32 është një sistem skedari më i ri i bazuar në formatin FAT dhe mbështetet nga Windows 95 OSR2, Windows 98 dhe Windows Millennium Edition. FAT32 përdor ID-të e grupimit 32-bit, por rezervon 4 bitët më të rëndësishëm, kështu që madhësia efektive e ID-së së grupit është 28 bit. Meqenëse madhësia maksimale e grupimeve FAT32 është 32 KB, FAT32 teorikisht mund të trajtojë vëllime 8 terabyte. Windows 2000 kufizon madhësinë e vëllimeve të reja FAT32 në 32 GB, megjithëse mbështet vëllime ekzistuese më të mëdha EAT32 (të krijuara në sisteme të tjera operative). Numri më i madh i grupimeve të mbështetura nga FAT32 e lejon atë të menaxhojë disqet në mënyrë më efikase se FAT 16. FAT32 mund të përdorë grupime 512 bajt për vëllime deri në 128 MB në madhësi.

Sistemi i skedarëve FAT 32 përdoret si sistemi i skedarëve të paracaktuar në Windows 98. Ky sistem operativ vjen me një program të veçantë për konvertimin e një disku nga FAT 16 në FAT 32. Windows NT dhe Windows 2000 mund të përdorin gjithashtu sistemin e skedarëve FAT, dhe për këtë arsye ju mund të nisni kompjuterin tuaj nga një disk DOS dhe të keni akses të plotë në të gjithë skedarët . Megjithatë, disa nga veçoritë më të avancuara të Windows NT dhe Windows 2000 ofrohen nga sistemi i tij i skedarëve, ntfs (NT File System). ntfs ju lejon të krijoni ndarje të diskut deri në 2 TB (si FAT 32), por, përveç kësaj, ka funksione të integruara të kompresimit të skedarëve, sigurisë dhe auditimit të nevojshëm kur punoni në një mjedis rrjeti. Dhe në Windows 2000 zbatohet mbështetja për sistemin e skedarëve FAT 32. Instalimi i sistemit operativ Windows NT fillon në një disk FAT, por me kërkesën e përdoruesit, në fund të instalimit, të dhënat në disk mund të konvertohen në formatin ntfs.

Këtë mund ta bëni më vonë duke përdorur programin Convert.exe të dhënë me sistemin operativ. Një ndarje e diskut e konvertuar në sistemin ntfs bëhet e paarritshme për sistemet e tjera operative. Për t'u kthyer në DOS, Windows 3.1 ose Windows 9x, duhet të fshini ndarjen ntfs dhe në vend të kësaj të krijoni një ndarje FAT. Windows 2000 mund të instalohet në një disk me sistemin e skedarëve FAT 32 dhe ntfs.

Aftësitë e sistemeve të skedarëve EAT32 janë shumë më të gjera se ato të FAT16. Karakteristika më e rëndësishme është se ai mbështet disqe deri në 2047 GB dhe punon me grupe më të vogla, duke reduktuar ndjeshëm sasinë e hapësirës së papërdorur të diskut. Për shembull, një hard disk 2 GB në FAT16 përdor grupe 32 KB, ndërsa FAT32 përdor grupe 4 KB. Për të ruajtur përputhshmërinë me programet ekzistuese, rrjetet dhe drejtuesit e pajisjes sa herë që është e mundur, FAT32 zbatohet me ndryshime minimale në arkitekturë, API, strukturat e brendshme të të dhënave dhe formatin e diskut. Por meqenëse elementët e tabelës FAT32 tani janë katër bajt në madhësi, shumë struktura të të dhënave të brendshme dhe në disk dhe API janë dashur të rishikohen ose zgjerohen. Disa API në disqet EAT32 janë të bllokuara për të parandaluar që shërbimet e vjetëruara të diskut të korruptojnë përmbajtjen e disqeve FAT32. Shumica e programeve nuk do të preken nga këto ndryshime. Mjetet dhe drejtuesit ekzistues do të funksionojnë në disqet FAT32. Megjithatë, drejtuesit e pajisjes së bllokut MS-DOS (si Aspidisk.sys) dhe shërbimet e diskut duhet të modifikohen për të mbështetur FAT32. Të gjitha shërbimet e diskut të ofruara nga Microsoft (Format, Fdisk, Defrag dhe ScanDisk për modalitetin real dhe të mbrojtur) janë ridizajnuar për të mbështetur plotësisht FAT32. Përveç kësaj, Microsoft po ndihmon shitësit kryesorë të shërbimeve të disqeve dhe drejtuesve të pajisjeve në modifikimin e produkteve të tyre për të mbështetur FAT32. FAT32 është më efikas se FAT16 kur punoni me disqe më të mëdhenj dhe nuk kërkon që ato të ndahen në ndarje 2 GB. Windows 98 domosdoshmërisht mbështet FAT16, pasi është ky sistem skedari që është në përputhje me sistemet e tjera operative, përfshirë ato të palëve të treta. Në modalitetin real MS-DOS dhe në modalitetin e sigurt të Windows 98, sistemi i skedarëve FAT32 është dukshëm më i ngadalshëm se FAT16. Prandaj, kur ekzekutoni programe në modalitetin MS DOS, këshillohet të përfshini një komandë në skedarin Autoexec.bat ose PIF për të ngarkuar Smartdrv.exe, gjë që do të përshpejtojë funksionimin e diskut. Disa programe të vjetra të dizajnuara për specifikimin FAT16 mund të raportojnë informacion të pasaktë në lidhje me sasinë e hapësirës së lirë ose totale të diskut nëse është më shumë se 2 GB. Windows 98 ofron API të reja për MS-DOS dhe Win32 që ju lejojnë të përcaktoni saktë këto metrika. Në tabelë 1 tregon karakteristikat krahasuese të FAT16 dhe FAT32.

Tabela 1. Krahasimi i sistemeve të skedarëve FAT16 dhe FAT32

Implementuar dhe përdorur nga shumica e sistemeve operative (MS-DOS, Windows 98, Windows NT, OS/2, UNIX).

Aktiv ky moment Mbështetet vetëm në Windows 95 OSR2 dhe Windows 98.

Shumë efektive për disqet logjike më të vogla se 256 MB.

Nuk punon me disqe më të vogla se 512 MB.

Mbështet kompresimin e diskut, për shembull duke përdorur algoritmin DriveSpace.

Nuk mbështet kompresimin e diskut.

Përpunon një maksimum prej 65,525 grupesh, madhësia e të cilave varet nga madhësia e diskut logjik. Meqenëse madhësia maksimale e grupit është 32 KB, FAT16 mund të punojë me disqe logjike jo më të mëdha se 2 GB.

Mund të punojë me disqe logjike deri në 2047 GB me një madhësi maksimale të grupit prej 32 KB.

Sa më e madhe të jetë madhësia e diskut logjik, aq më pak efikas është ruajtja e skedarëve në sistemin FAT"16, pasi rritet edhe madhësia e grupeve. Hapësira për skedarët ndahet nga grupe, dhe për këtë arsye, me madhësinë maksimale të një logjike disk, një skedar me madhësi 10 KB do të kërkojë 32 KB dhe 22 KB hapësirë ​​​​në disk do të harxhohet.

Në disqet logjike më të vogla se 8 GB, madhësia e grupit është 4 KB.

Gjatësia maksimale e mundshme e skedarit në FAT32 është 4 GB minus 2 bajt. Aplikacionet Win32 mund të hapin skedarë të kësaj gjatësie pa përpunim të veçantë. Aplikacionet e tjera duhet të përdorin ndërprerjen Int 21h, funksioni 716C (FAT32) me flamurin e hapur të vendosur në EXTEND-SIZE (1000h).

Në sistemin e skedarëve FAT32, në tabelën e ndarjes së skedarëve ndahen 4 bajt për çdo grupim, ndërsa në FAT16 - 2, dhe në FAT12 - 1.5.

4 bitet më domethënëse të një elementi tabele 32-bitësh FAT32 janë të rezervuara dhe nuk marrin pjesë në formimin e numrit të grupimit. Programet që lexojnë drejtpërdrejt tabelën PAT32 duhet t'i maskojnë këto pjesë dhe t'i mbrojnë ato nga ndryshimi kur shkruhen vlera të reja.

Pra, FAT32 ka përparësitë e mëposhtme mbi implementimet e mëparshme të sistemit të skedarëve FAT:

    mbështet disqe deri në 2 TB;

    organizon hapësirën e diskut në mënyrë më efikase. FAT32 përdor grupe më të vogla (4 KB për disqe deri në 8 GB), gjë që kursen deri në 10-15% të hapësirës në disqe të mëdhenj në krahasim me FAT;

    direktoria rrënjësore FAT 32, si të gjitha drejtoritë e tjera, tani është e pakufizuar, përbëhet nga një zinxhir grupimesh dhe mund të vendoset kudo në disk;

    ka besueshmëri më të lartë: FAT32 është në gjendje të lëvizë direktoriumin rrënjë dhe të punojë me një kopje rezervë FAT, përveç kësaj, rekordi i nisjes në disqet FAT32 është zgjeruar për të përfshirë një kopje rezervë të strukturave kritike të të dhënave, që do të thotë se disqet FAT32 janë më pak të ndjeshëm ndaj shfaqja e zonave individuale të këqija sesa vëllimet ekzistuese FAT;

    programet ngarkohen 50% më shpejt.

Tabela 2. Krahasimi i madhësive të grupimeve

Kapaciteti i diskut

Madhësia e grupit në FAT16, KB

Madhësia e grupit në FAT32, KB

256 MB-511 MB

Nuk mbështetet

512 MB -1023 MB

1024 MB - 2 GB

2 GB - 8 GB

Nuk mbështetet

8 GB-16 GB

Nuk mbështetet

16 GB-32 GB

Nuk mbështetet

Më shumë se 32 GB

Nuk mbështetet

Një mjet i përmirësuar i defragmentimit të diskut optimizon vendosjen e skedarëve të aplikacionit që ngarkohen kur aplikacioni niset. Është e mundur të konvertohet disku në EAT32 duke përdorur programin Drive Converter (FAT32), por pas kësaj rekomandohet të ekzekutoni programin Disk Defragmenter - përndryshe kompjuteri do të punojë me diskun më ngadalë se më parë. Kur përdorni FAT32, konfigurimi alternativ i nisjes së Windows 98 dhe Windows NT 4.0 bëhet i pamundur, pasi ky i fundit nuk mbështet FAT32. FAT32 ndan hapësirën në disk në mënyrë shumë më efikase se versionet e mëparshme të sistemit të skedarëve FAT. Kjo çliron dhjetëra apo edhe qindra megabajt në disqe të mëdhenj dhe kur kombinohet me mjetin e avancuar të defragmentimit të diskut FAT32, redukton ndjeshëm kohën e ngarkimit të aplikacionit. Procedura për konvertimin e sistemit të skedarëve në hard diskun tuaj në FAT32 duke përdorur Drive Converter (FAT32) është mjaft e thjeshtë. Për ta bërë këtë, duhet të hapni në mënyrë sekuenciale menynë Start, programet e nënmenysë, Aksesorët, Veglat e Sistemit dhe të zgjidhni komandën Drive Converter (FAT32). Konvertimi mund të ndikojë në veçoritë e hibernimit (duke ruajtur gjendjen e kompjuterit në disk) që gjenden në shumë kompjuterë. Sistemet në të cilat modaliteti i gjumit zbatohet përmes AWS BIOS ose ACPI (Advanced Configuration and Power Interface) S4/BIOS duhet të mbështesin FAT32 - vetëm atëherë ato do të funksionojnë siç duhet në Windows 98.

Shumica e prodhuesve të BIOS përfshijnë mbrojtje antivirus që monitoron ndryshimet në MBR (Master Boot Record). Për më tepër, shërbimet e vjetra antivirus të instaluara si programe rezidente ose drejtues të modalitetit real mund të zbulojnë ndryshimet MBR kur nisin MS-DOS. Për shkak se konvertimi në FAT32 modifikon në mënyrë të pashmangshme MBR-në, disa mjete të kontrollit të virusit mund ta interpretojnë gabimisht këtë si një shenjë se sistemi është i infektuar. Prandaj, nëse një mjet antivirus zbulon një ndryshim në MBR, ai ofron për ta "kuruar" atë. Është më mirë të hiqni softuerin tuaj antivirus dhe të çaktivizoni mbrojtjen e integruar të virusit të BIOS-it përpara se ta konvertoni diskun në FAT32. Pastaj mund të riinstaloni programin antivirus dhe të aktivizoni mbrojtjen antivirus të integruar në BIOS.

Artikujt më të mirë mbi këtë temë