25 януари 2016 г.

Файлови системи

Файлова система (на английски: file system) е регламент, определящ начина на организация, съхранение и наименуване на данните върху носителите на информация. Той определя формата на физическо съхранение на информацията, която е прието да се групира във вид на файлове. Конкретната файлова система определя размера на името на файла, максималния му възможен размер, набора от атрибути на файла. Някои файлови системи предоставят служебни възможности, например, избирателен достъп или криптиране на файловете.
Файловата система свързва носителя на информация от една страна с приложно-програмния интерфейс за достъп до файловете от друга. Когато приложната програма се обръща към файла, тя не знае как точно е организирана информацията в него, нито пък какъв точно е физическият ѝ носител (CD, твърд диск, магнитна лента или флаш памет). За програмата са от значение името на файла, неговият размер и атрибути. Тези данни тя получава от драйвера на файловата система. Именно файловата система установява къде и как ще бъде записан файлът върху физическия носител).
От гледна точка на операционната система, целият твърд диск представлява съвкупност от клъстери с размер от 512 байта и повече. Драйверите на файловата система организират клъстерите във файлове и директории (които реално са също файлове, съдържащи списъци с файлове). Драйверите следят също така кои от клъстерите се използват в момента, кои са свободни и кои са отбелязани като повредени.
Връзката между файловата система и физическите носители на информация не е задължително директна. Съществуват и виртуални файлови системи, както и мрежови файлови системи, които представляват начин за достъп до файлове на отдалечен компютър.

Управление на пространството


Файловата система е отговорна за организирането на файловете и директориите, и проследяване на това кои области от физическото устройство са заделени за даден файл, и кои са свободни. Тя е алгоритъм , който превежда сложни инструкции ( като например „ Запиши 300 байта във файл HelloWorld.txt; задай времето на създаване на файла да е текущото време; направи файла достъпен само за мен) в команди (просто казано Пиши и Чети) , разбираеми от съответното устройство. При блок устройствата (твърди дискове, флаш памети и др.) , файловите системи организират разполагаемото пространство, обединявайки секторите( най-малките физически единици на устройството) в клъстери, които са най-малката логическа единица за запазване на информация и обикновено са с размер от 512 байта(1 сектор) до 64 килобайта(128 сектора) . Ако например размера на един файл не е точно кратно на размера на клъстера, това може да доведе до създаването на неизползваемо пространство . За 512 байтово заделяне, загубеното пространство е средно 256 байта. Размера на клъстерите може да се задава когато се създава файловата система. Избирайки размер на клъстера, базирайки се на средния размер на файловете , които ще се съхраняват, може да намали загубеното, неизползваемо пространство.
Когато един файл бъде създаден, файловата система заделя необходимото място на физическия носител. Това място, по възможност, е съставено от последователни сектори. Когато файловете се изтриват, това което всъщност се случва е, че мястото което те са заемали се счита за освободено и възможно за използване от други файлове. С времето тези процеси на запазване и освобождаване създават редуващи се заети и освободени пространства на носителя. Това е известно като фрагментация на свободното пространство. Когато се създава файл, и няма достатъчно голям размер от последователни освободени сектори , в които файла да бъде записан, файловата система използва множество освободени пространства и записва в тях файла на фрагменти (части). Фрагментиран файл може да се получи и когато файл, който първоначално е бил записан нефрагментиран ( на непрекъсната последователност от свободни сектори), увеличи размера си, без да има достатъчно свободно пространство „около“ него. Тогава файловата система заделя свободно пространство за допълнителния размер другаде, правейки файла фрагментиран. Обикновено при дисковите физически носители , фрагментираната информация може да намали производителността на системата.

Консистенция на файловата система ( consistency )


Файловата система може да се провали поради три основни причини – повреда на физическия носител, битрот, или липса на консистенция(цялост на информацията). Файловата система е алгоритъм, който превръща файлове в сектори и обратно. Но не всяка последователност от сектори представлява валидна информация за този алгоритъм. Когато това е така, говорим за липса на консистенция на данните. Пример за това може да бъде файл с дата от следващия месец, или последователност от клъстери, които не принадлежат на никой файл. Файловата система разполага с инструменти, които откриват подобни несъответствия и ги поправят. Понякога поправките са безпроблемни, като например смяната на датата на файла със текущата. В друг случай може да се настъпи загуба на данни – например декларирането на група клъстери, непринадлежащи на файл, за свободно пространство.
За липсата на консистенция във файловата система може да има много причини, най-често срещаната от които е неправилното изключване на устройството. Работенето с файлова система с нарушена консистенция крие рискове – достъпването на повредени файлове може да ги унищожи или дори да увреди иначе здрави такива. Поради тази причина, повечето файлови системи стартират проверки през определен период, или при установяване на неправилно изключване на системата. Но поради факта, че при опит информацията да бъде поправена може да се стигне и до повреждане на друга, най-добрия начин за противодействие на нарушаването на консистенцията е да се предприемат превантивни мерки това да не се случва. Това може да стане или чрез “journaling” ,или чрез “copy-on-write”.


Journaling


Какво ще се случи, ако захранването спира произволно. Да предположим, че записваме 3 гигабайтов файл на твърд диск. Файловата система може първо да задели нужното пространство (да регистрира промените) и след това да запише данните, или първо да запише данните и след това да регистрира файла. Нека допуснем, че захранването спре между тези две операции. В първия случай имаме 3 гигабайтов файл, но информацията в него не е тази, която ни трябва, а вместо това е произволна колекция от данни, които случайно са се намирали на мястото заделено за файла(поради факта, че на по-ранен етап това място вече е било декларирано за свободно от файловата система). И най-лошото – няма да имаме и представа за този проблем докато не опитаме да достъпим тази информация. Във втория случай информацията ще бъде записана – някъде, но файловата система няма да знае, че такъв файл дори съществува. Във всеки случай губим информацията. В допълнение, частична, недовършена процедура по запазване на информация в директория, може да наруши предишни данни, отчитането на свободно пространство или нещо друго и по този начин да засегне файлове, които дори не са били използвани.
Файлова система, която използва „journaling” има специфична зона от клъстери, наричани журнал (journal), в които се записва какво иска да свърши файловата система. Когато ние решим да запишем нашият 3 гигабайтов файл, файловата система може (1) да отбележи в журнала, че иска да запише файл, (2) да запише файла, (3) да отбележи в журнала факта, че файла е успешно записан, (4) да регистрира файла, (5) да изтрие журнала. Ако захранването спре, при следващото си зареждане файловата система първо ще прочете журнала и ще прецени какво да предприеме, като по този начин ще ни остави последователна файлова система. Така например, ако възникне проблем между:
(1) и (2) – файловата система ще знае , че е искала да запише файл, и дори и да е успяла да запише нещо , този запис е непълен. Освобождава пространството, което може да е заделила предварително за файла и изтрива журнала. Файла го няма , но файловата система е наред.
(3) и (4) - файловата система знае , че е успяла да запише файла , но при регистрирането му е имало проблем. И понеже информацията във файла е коректна, файловата система се опитва да регистрира файла правилно и да се увери че това няма да навреди на целостта останалите данни в директорията. Ако успее, разполагаме с файл. В противен случай мястото се освобождава, но системата е наред.
(4) и (5) - Всичко е минало наред, файловата система е наред. Няма нищо за поправяне. Изтрива журнала.
Във всеки случай, след прочитането на журнала запазваме консистенцията на файловата система. Въпреки това трябва да се отбележи, че тази функция не е перфектна и във редки случаи самият журнал може да се повреди, правейки го в най-добрия случай безполезен, а в най-лошия – разрушителен. Journaling се използва от повечето файлови системи днес. Като изключения, които си струва да отбележим са FAT32 и ext2.


По-разпространени файлови системи


FAT - Към 2013 г. FAT и нейният вариант FAT32 са най-простите файлови системи все още в употреба. Въпреки че FAT32 се среща все по-рядко на персонални компютри, тази система е основната за USB памети, памет карти за телефони и камери и навсякъде, където улеснената употреба е приоритет. FAT не използва специални операции, за да постигне непрекъснатост и цялост на файловата система, и производителността й значително намалява с последователното записване, изтриване и преместване на файлове върху физическия носител. Няма разширени функционалности, а има значителни недостатъци. На FAT32 например, няма възможност за съхранение на файл по-голям от 4GB.

NTFS – Това е файловата система използвана от Windows (NT4, 2000, XP, Vista, 7, 8). Има разширени възможности и е сравнително бърза. Според специалисти, един от недостатъците й е , че спецификацията е секретна и на теория само Microsoft знаят как работи тя. Linux може само да чете файлове от NTFS, но не и да записва, освен ако не се използва допълнителен софтуер за конкретната задача.

EXT - EXT фамилията от файлови системи са най-разпространени при използването на Linux операционни системи. Поредицата включва ext1, ext2, ext3, и ext4. Ext1 почти не се използва. Ext2 е много надеждна и е издържала теста на времето (15 г. към момента на писане на статията). Ext3, всъщност стандартната Linux файлова система, е същата като предшественика й, но с допълнение на функцията “journaling”.


Директории


Файловите системи обикновено имат директории (папки), които позволяват на потребителя да групира файлове в отделни каталози. Това може да бъде осъществено чрез асоцииране на името на файла с индекс в таблица на съдържанието или в inode (структура от данни в Unix подобни файлови системи, която съдържа цялата информация за обект на файловата система, с изключения на данните на файла и името му). Структурите на директориите могат да бъдат линейни или разклонени. Първата файлова система, позволяваща произволна йерархия на папките е използвана при операционната система Multics[1]. Първоначалните файлови системи на Unix-подобните системи също поддържат и произволни йерархии на директориите, както напр. Apple's Hierarchical File System и последователя и HFS+ в класическия Mac OS (HFS+ все още се използва в Mac OS X), FAT файловата система при MS-DOS 2.0 и следващите и Microsoft Windows, NТFS файловата система в семеството на Windows NT, ODS-2 и по-високите нива на Files-11 файлова система в OpenVMS.

Файлова система на UNIX:

Файловата система има един коренен каталог - бележи се с /. В този каталог се монтира определено устройство (обикновено един от дяловете на твърдия диск). Файловата система на това устройство се нарича коренова (на английски: root). По този начин в този каталог се вижда съдържанието на това устройство. В някой каталог от това устройство могат да бъдат монтирани и други устройства и по този начин и тяхното съдържание да стане достъпно. Обикновено работата по монтирането и демонтирането на устройствата се извършва автоматично. Съществуват програми, които позволяват монтиране (mount) и демонтиране (umount) на файлови системи. При повечето UNIX-подобни системи подвижните носители (дискети и CD), флаш-памети и други външни устройства за данни се монтират в каталог /mnt, /mount или /media.


Начин на разпределение на данните:


В компютърните файлови системи клъстър е единица заделено дисково пространство определено за файлове и директории. С цел да се намали претоварването на управляваните дискови структури, файловата система не заделя отделени дискови сектори, а съседни групи от сектори, наречени клъстъри.

На диск който използва 512-байтови сектори, един 512-байтов клъстер съдържа един сектор, докато един 4-килобайтов клъстер съдържа осем сектора.

Клъстърът е най-малкото логическо количество дисково пространство, което може да бъде заделено за съхранение на файл. Ето защо съхранението на малки файлове във файлова система с големи клъстъри ще причини загуба на дисково пространство. За клъстъри с размери по-малки в сравнение със средната файлова големина, загубеното пространство на файл статистически ще бъде около половината от размера на клъстъра; за клъстъри с големи размери, загубеното пространство ще нарасне. Все пак големите клъстърни размери намаляват претоварването причинено от фрагментация, което може да увеличи скоростта на четене и запис като цяло. 
Типични клъстърни размери са от 1 сектор (512 B) до 128 сектора (64 KiB).

Не е необходимо клъстърът да бъде съставен от физически съседни сектори на диска; той може да обхваща повече от една пътечка или да е съставен от непоследователни сектори в самата пътечка. Това не бива да се бърка с фрагментация, тъй като секторите все още са логически съседни.

Няма коментари:

Публикуване на коментар