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

от Уикипедия, свободната енциклопедия

Файлова система (на английски: file system) е регламент, определящ начина на организация, съхранение и наименуване на данните върху носителите на информация. Той определя формата на физическо съхранение на информацията, която е прието да се групира във вид на файлове. Конкретната файлова система определя размера на името на файла, максималния му възможен размер, набора от атрибути на файла. Някои файлови системи предоставят служебни възможности, например, избирателен достъп или криптиране на файловете.

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

От гледна точка на операционната система, целият твърд диск представлява съвкупност от клъстери с размер от 512 байта и повече. Драйверите на файловата система организират клъстерите във файлове и директории (които реално са също файлове, съдържащи списъци с файлове). Драйверите следят също така кои от клъстерите се използват, кои са свободни и кои са отбелязани като повредени.

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

Управление на пространството[редактиране | редактиране на кода]

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

Когато един файл бъде създаден, файловата система заделя необходимото място на физическия носител. Това място, по възможност, е съставено от последователни сектори. Когато файловете се изтриват, това което всъщност се случва е, че мястото което те са заемали се счита за освободено и възможно за използване от други файлове. С времето тези процеси на запазване и освобождаване създават редуващи се заети и освободени пространства на носителя. Това е известно като фрагментация на свободното пространство. Когато се създава файл, и няма достатъчно голям размер от последователни освободени сектори, в които файла да бъде записан, файловата система използва множество освободени пространства и записва в тях файла на фрагменти (части). Фрагментиран файл може да се получи и когато файл, който първоначално е бил записан нефрагментиран (на непрекъсната последователност от свободни сектори), увеличи размера си, без да има достатъчно свободно пространство „около“ него. Тогава файловата система заделя свободно пространство за допълнителния размер другаде, правейки файла фрагментиран. Обикновено при дисковите физически носители, фрагментираната информация може да намали производителността на системата.

Надеждност на файловата система[редактиране | редактиране на кода]

Файловата система може да се провали поради три основни причини – повреда на физическия носител, битрот, или липса на интегритет (цялостност на информацията).

Файловата система е алгоритъм, който превръща файлове в сектори и обратно. Но не всяка последователност от сектори представлява валидна информация за този алгоритъм. Когато това е така, говорим за липса на консистенност на данните. Пример за това може да бъде файл с дата от следващия месец, или последователност от клъстери, които не принадлежат на никой файл. Файловата система разполага с инструменти, които откриват подобни несъответствия и ги поправят. Понякога поправките са безпроблемни, като например смяната на датата на файла с текущата. В друг случай може да се настъпи загуба на данни – например декларирането на група клъстери, непринадлежащи на файл, за свободно пространство.

За липсата на консистенция във файловата система може да има много причини, най-често срещаната от които е неправилното изключване на устройството. Работата с повредени файлове може да ги унищожи или дори да увреди иначе здрави такива. Поради тази причина повечето файлови системи стартират проверки през определен период или при установяване на неправилно изключване на системата. Но поради факта, че при опит информацията да бъде поправена може да се стигне и до повреждане на друга, най-добрият начин за противодействие на нарушаването на консистенцията е да се предприемат превантивни мерки това да не се случва. Това може да стане или чрез „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.

Една примерна UNIX файлова система може да изглежда така:

/usr
/bin
/arch
/ls
/raw
/lib
/libhistory.so.5.2
/libgpm.so.1
/home
/lost+found
/host.sh
/guest
/Pictures
/example.png
/Video
/matrix.avi
/news
/lost_ship.mpeg

Файлова система на MS DOS[редактиране | редактиране на кода]

В най-простия случай всички файлове върху даден диск се съхраняват в една директория. Такава система с едно ниво се е използвала в CP/M и първите версии на MS-DOS. За първи път йерархична файлова система с вложени една в друга в друга директории се появява в UNIX.

Wiki.txt
Tornado.jpg
Notepad.exe
(Пример за файлова система с едно ниво)

В MS DOS файловата система има няколко коренни каталога:

C:
\Program files
\CDEx
\CDEx.exe
\CDEx.hlp
\mppenc.exe
\Моите документи
\Wiki.txt
\Tornado.jpg
D:
\Music
\ABBA
\1974 Waterloo
\1976 Arrival
\Money, Money, Money.ogg
\1977 The Album
(Йерархична файлова система Windows/DOS)

На практика, в DOS/Windows системите също като в UNIX-подобните системи съществува една коренна директория с вложени в нея под-директории, наречени с имената „c:“, „d:“ и т.н. В тях се „монтират“ дяловете на твърдия диск. Тоест, c:\ просто означава съкратено file:///c:/. За разлика от UNIX-подобните файлови системи обаче, в Windows е забранен записът в коренния каталог, както и разглеждането му.

Вижте също[редактиране | редактиране на кода]

Източници[редактиране | редактиране на кода]

  1. R. C. Daley; P. G. Neumann (1965). A General-Purpose File System For Secondary Storage. Fall Joint Computer Conference. AFIPS. pp. 213 – 229. doi:10.1145/1463891.1463915. Посетен на 30 юли 2011.

Външни препратки[редактиране | редактиране на кода]

  Тази страница частично или изцяло представлява превод на страницата „Файловая система“ и страницата „File systems“ в Уикипедия на руски и английски език. Оригиналните текстове, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за творби създадени преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналните страници тук и тук, за да видите списъка на техните съавтори. ​

ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни.