打印
[复制链接]
578|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xydzx|  楼主 | 2016-10-22 09:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
分区和文件系统类型:
我们知道windows使用的是FAT或者NTFS文件系统。而在Linux里则是ext2和ext3。我想大家知道磁盘的物理结构就是一些磁道,扇区之类了。文件系统的出现当然是为了更好的管理文件,文件系统的主要特征,我想是它的逻辑结构。FAT,NTFS或者ext2都是这样,不过大家的定义总是有一些不同,搞的大家很麻烦。以后不知哪个牛人可以创建一个让微软和其他unix厂商都信服的文件系统呢,一统江湖。
我大致说说ext2的逻辑结构:
Superblock        是分区的第一个Block,比如文件系统的大小,起始扇区地址,以及其他一些重要信息存放于此。如果损坏,整个分区将回天乏术了。
Block group        实际每个ext2分区后都会分成几个block group的,每个group之中都有自己的
superblock / group description / block bitmap / inode bitmap / inode table / data blocks
Group Description        Block group的说明信息
Block bitmap        对应所有Block的使用状况
Inode bitmap        对应所有inode的使用状况
Inode table        类似于以前我们学的文件分配表,文件的各种属性将放于此,而具体内容将放于Block区。同时在inode之中也会有文件的地址信息,从而找到文件。
Block area        sector扇区的2的n次方,是文件系统最小的读写单位。当然在合理范围内越大读写相对越快,不过对于小文件浪费空间。
要点:
1、 Superblock,block bitmap,inode bitmap就是metadata
2、格式化ext2分区的时候决定了inode table和block area的大小,而且格式化之后再不可改变。一般为每4kb分配一个inode,每个inode的大小是128b,block size一般大小是1024/2048/4096等。
3、Inode table的大小决定了能够存放文件的多少。
4、Inode并不存放文件名称,文件名称和相应的inode信息存放于目录的block area之中。
                
做个总结,我们需要编辑/etc/passwd下的一个文件,Linux的基本操作应该大致是这样:
1、根据/的block area信息找到对应的/etc目录的inode信息
2、 再用/etc的inode信息在inode table之中找到对应/etc项,找到对应的/etc的目录block area区域,找到/etc/passwd的inode信息
3、再到inode table之中根据/etc/passwd的inode信息找到对应项,这样我们就找到了这个文件的block area地址了。
4、根据地址读出文件
清楚了吧,其实文件系统的实现原理也基本一样,理解了FAT的文件分区表,也很好理解这个inode table的。
ext3只是ext2的加强,增加了日志功能(journaling)。当然写的时候会慢些,不过恢复的时候会快很多,而且增加了文件系统的稳定性。


Linux所支持的主要的文件系统:
• Linux的VFS (Virtual Filesystem Switch)
Linux的内核通过这个VFS来管理和读取其他文件系统的。这样的话,其他的应用并不需要知道各种文件系统的存取模式就可以读取不同文件系统之中的文件了,因为所有这些,VFS已经为我们做了。对于软件开发商来说这的确是一件大好事。
• 传统文件系统
ext2 / minix / MS-DOS / FAT / iso9660
• 日志型文件系统
ext3 / ReiserFS / NTFS / JFS / XFS
• 网络型文件系统
NFS / SMBFS
好了,接下来说一说分区和建立文件系统:
使用fdisk建立分区:
$fdisk –l           #可以列出所有设备
$fdisk devicename    #管理指定设备的分区,device是整个硬盘
进入fdisk之后我想大有DOS的fdisk使用经验的话,很容易掌握Linux下的fdisk的使用。改变分区之后,应该要重新启动,才可对新的分区进行操作。
使用mke2fs建立文件系统:
$mke2fs devicename   #这里是分区
可以使用参数-b指定block size
可以使用参数-j创建ext3文件系统
等等…详细请察看man手册


Swap分区和swap文件
在windows95的时候我们就知道了有虚拟内存的概念,Linux世界也是一样,在Linux之中实现虚拟内存可以使用专门的分区,也可以使用swap文件来实现。
一般我们建立我们内存2倍大的swap。
swap分区:
1、fdisk建立一个新的分区,并将其partition ID设为82。
2、mkswap devicename   刚才的那个分区
3、swapon devicename   来启动虚拟内存
swap文件:
1、 建立swap文件,比如dd if=/dev/zero of=/tmp/myswap bs=4k coung=16382会创建一个64k的文件/tmp/swap
2、  mkswap filename将文件变成swap格式
3、  swapon filename来启动这个文件的虚拟内存

LVM和RAID我打算以后找个篇幅专门说说,也有待我再研究。
如果希望可以建立一个可以扩充的文件系统,就必须要使用LVM的有关卷的概念,如果使用partition magic之类的工具调整分区大小,最多也不能超过该硬盘的大小。

接下来说说文件系统之中的具体的文件。
在Linux之中有以下的文件类型:
使用ls -l命令可以知道文件的类型,在Linux之中有以下7中文件类型:
目录                                             d
普通文件                                       -
字符设备                                       c
块设备                                          b
本地套接口                                     s
有名管道                                       p
链接(类似windows的快捷方式)        l

文件的属性资料(存储在inode之中的)我想在用户权限的时候再详细说明。
相对路径(relative)和绝对路径(absolute):
以根目录/开头的就是绝对路径,而以其他开头的路径就是相对路径,表示相对当前路径而言,相对路径变成绝对路径会加上pwd命令返回的当前路径。

目录树: 
FHS (Filesystem Hierarchy Standard)是一个规范,很多Linux厂商已经开始遵照它了。不过FHS很笼统,只规定了两级目录的规范。其一是根目录/下的主要目录以及应该摆放什么文件,比如/etc应该摆放各种配置文件,而/bin和/sbin应该摆放可执行文件等,第二级则主要针对/usr和/var做出了更深层目录的定义。以下我大致说说每个目录在Linux之中的作用。

/
根目录/,一般建议根目录下只放目录,尽量不要将文件直接放于其中。/是首先加载的文件系统。

/boot
第一章已经提到了,放置内核以及bootloader的文件。主要用于启动。

/dev
设备文件全部在这个目录,硬盘,分区,键盘,鼠标,USB,tty等等。

/bin
最小的系统操作性所需要的执行文件。

/etc
配置文件的集中营。

/home
用户的家。

/lib
C库和C编译器。

/sbin
系统管理所需要的一些命令。包括引导,修复等命令,我想是system admin bin的意思。

/tmp
临时文件目录。每次重新启动就会被系统自动删除。
/usr
次要的文件和命令。由FHS定义的第二层目录,类似windows之中的program files。
•    /usr/bin, /usr/sbin:user和系统管理员的大部分命令
•    /usr/include:c/c++等程序的header
•    /usr/lib:应用软件用到的库 
•    /usr/local:用户自行安装的软件 
•    /usr/share:共享文件的目录 
•    /usr/share/doc:应用软件的说明文件 
•    /usr/share/man:manpage 
•    /usr/src:Linux的源代码
•    /usr/X11R6:X window的执行文件等
/var
由FHS定义的第二层目录。主要放些一些应用的专用数据和配置文件,比如named的/var/named就放了zone文件,当然一般log日志文件也是在这个目录。
•        /var/cache:系统的缓存 
•        /var/lib:执行的运行库 
•        /var/log:日志 
•        /var/lock:锁
•        /var/run:进程的pid
•        /var/spool:队列的目录,包括邮件,打印和cron的schedule。
/mnt
/media
挂接点,比如CDROM通常在/mnt/cdrom

/opt
类似/usr/local,应用软件的安装点

/lost+found
系统不正常时候,无法在inode table找到的孤儿,就会放在这里,通常是fcsk命令产生,会在每个分区的最高层目录,比如/boot是单独分区的话,会有/boot/lost+found

/srv
一些服务用到的文件,比如www

/root
root的家

/proc
使虚目录,主要是内核等等信息,比如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net 等。

不可单独分区的目录:
因为Linux启动时,一般只有/被挂接,所以启动所需的文件皆不可单独分区。比如/etc,/bin,/sbin,/dev,/lib等。

建议单独分区的目录:
/home, /usr, /var, /tmp,这些目录可能会因应需要不断扩展的,单独分区容易管理。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

151

帖子

1

粉丝