zoukankan      html  css  js  c++  java
  • Linux磁盘与文件系统管理

    全文转载:原出处 https://blog.csdn.net/yzhang6_10/article/details/51764927

    系统管理的重要任务之一就是管理好自己的磁盘文件系统,每个分区不可太大也不能太小,太大会造成磁盘容量的浪费,太小则会产生文件无法存储的困扰。

    认识EXT2文件系统

    Linux最传统的磁盘文件系统使用的是EXT2。

    磁盘分区与组成

    整个磁盘的(物理)组成主要有:

    ² 圆形的盘片(主要记录数据的部分);

    ² 机械手臂与机械手臂上的磁头(可读写盘片上的数据);

    ² 主轴马达,可以转动盘片,让机械手臂的磁头在盘片上读写数据。

    数据的存储与读取重点在于盘片,而盘片上的物理组成为:

    ² 扇区(Sector)为最小的物理存储单位,每个扇区为512bytes

    ² 将扇区组成一个圆,那就是柱面(Cylinder),柱面是分区(partition)的最小单位

    ² 第一个扇区最重要,里面有硬盘的主引导记录(MBR)及分区表,其中MBR占有446bytes,而分区表则占有64bytes。

    各种接口的磁盘在Linux中的文件名分别为:

    ² /dev/sd[a-p][1-15]:为SCSI,SATA,USB,Flash等接口的磁盘文件名

    ² /dev/hd[a-d][1-63]:为IDE接口的磁盘文件名

    磁盘分区指的是告诉操作系统“我这块磁盘在此分区可以访问的区域是由A柱面到B柱面之间的块”,如此一来操作系统的就能够知道它可以在所指定的块内进行文件数据的读、写、查找等操作。磁盘分区意即指定分区的起始与结束柱面就可以。

    指定分区的柱面范围记录在第一个扇区的分区表中。但因为分区表仅64bytes,因此最多只能记录四条分区的记录,这四条记录称为主分区或扩展分区,其中扩展分区还可以再分出了逻辑分区,而能被格式化的则仅有主分区域逻辑分区而已。

    总结:

    ² 主分区与扩展分区最多可以有4个(硬盘的限制)

    ² 扩展分区最多只能有一个(操作系统的限制)

    ² 逻辑分区是由扩展分区持续分出来的分区

    ² 能够被格式化后作为数据访问的分区为主要分区与逻辑分区,扩展分区无法格式化

    ² 逻辑分区的数量依操作系统而不同,在Linux系统中,IDE硬盘最多有59个逻辑分区(5号到63号),SATA硬盘则有11个逻辑分区(5号到15号)。

    文件系统特性

    磁盘分区完成后,需格式化后,操作系统才能使用分区的原因:每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,需要将分区进行格式化,以成为操作系统能够利用的文件系统格式。

    每种操作系统能够使用的文件系统并不相同,Windows 98使用FAT(FAT16),Windows 2000以后使用NTFS文件系统。Linux的正规文件则为Ext2。

    目前格式化已经不再说成针对分区来格式化了,通常称一个可被挂载的数据为一个文件系统而不是一个分区。

    文件系统包括文件内容和文件属性。通常文件系统会将这两部分的数据分别存放在不同的块,权限与属性放置到inode中,至于实际数据则放置在datablock块中。另外,还有一个超级块会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等。

    inode与block都有编号,这三个数据意义如下:

    ² super block:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;

    ² inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;

    ² block:实际记录文件的内容,若文件太大,会占用多个block。

    由于每个inode与block都有编号,每个文件都会占用一个inode,indoe内则有文件数据放置的block号码。找到文件的inode话,就知道这个文件所放置数据的block号码,当然也就能够读出该文件的实际数据。这是个比较有效的做法,故磁盘能够在较短的时间内读取出全部的数据,读写的性能比较好。此方法为索引式文件系统。

    FAT格式,则不能在一开始将所有的block读取出来,每个block号码都记录在前一个block当中,没办法一次全部读出block号码,读取速度慢一些。

    碎片整理

    需要碎片整理的原因是文件写入block太过于离散了,此时文件读取的性能将会变得很差所致。可以通过碎片整理将同一个文件所属的block汇合在一起,这样数据的数据读取会比较容易。FAT的文件系统需要经常碎片整理一下。

    而Ext2是索引式文件系统,基本上不太需要经常经常进行碎片整理的。但如果文件系统使用太久,经常删除、编辑、新增文件时,那么还是可能会造成文件数据太过于离散,此时或许会需要进行碎片整理。

    Linux的Ext2文件系统

    inode的内容用于记录文件的权限与相关属性,置于block块则是在记录文件的实际内容,而且文件系统一开始就将inode与block规划好了,除非重新格式化(或者利用resize2fs等命令更改文件大小),否则inode与block固定后就不再变动。但当文件系统高达几百GB时,则将所有inode与block放置在一起将是不明智的决定,因为inode与block的数量太大,不容易管理。

    Ext2文件系统格式化时,基本上是区分为多个块组,每个块组都有独立的inode、block、superblock系统。就像当兵时,一个营里面分成数个连,每个连有自己的联络系统,但最终都向营部汇报连上最正确的信息。这样分成一群比较好管理。

    整体规划中,文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装引导装在程序。将不同的引导装载程序安装到个别的文件系统最前端,而不用覆盖整块硬盘唯一的MBR,这样能够制作出多重引导环境。

    数据块(datablock)

    data block是用来放置文件内容的地方,在Ext2文件系统中所支持的block大小有1KB,2KB以及4KB三种而已。注意:由于block大小的区别,会导致该文件系统能够支持的最大磁盘容量与最大单一文件容量并不相同。

    Block大小

    1KB

    2KB

    4KB

    最大单一文件限制

    16GB

    256GB

    2TB

    最大文件系统容量

    2TB

    8TB

    16TB

    注意:虽然Ext2已经能够支持大于2GB以上的单一文件容量,不过某些应用程序依然使用旧的限制,即某些程序只能够支持小于2GB以下的文件。

    ² 原则上,block大小与数量在格式化完就不能够再改变了(除非重新格式化)

    ² 每个block内最多只能够放置一个文件的数据

    ² 如果文件大于block的大小,则一个文件会占用多个block数量

    ² 若文件小于block,则该block的剩余空间就不能够再被使用了(磁盘空间会浪费)

    如果block较大,会造成空间浪费,但block较小的话,则大型文件将会占用数量更多的block,而inode也要记录更多的block号码,此时可能导致文件系统不良的读写性能。

    inodetable(inode表格)

    inode记录的文件数据如下:

    ² 该文件的访问模式(read,write,excute)

    ² 该文件的所有者与组(owner,group)

    ² 该文件的大小

    ² 该文件创建或状态改变的时间(ctime)

    ² 最近一次的读取时间(atime)

    ² 最近修改的时间(mtime)

    ² 定义文件特定的标志(flag),如SetUID等

    ² 该文件真正内容的指向(pointer)

    inode数量与大小均是在格式化时就已经固定的,inode的特色如下:

    ² 每个inode大小均固定为128bytes

    ² 每个文件都仅会占用一个inode而已

    ² 文件系统能够创建的文件数量与inode的数量有关

    ² 系统读取文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能开始实际读取block内容。

    假设inode记录block号码的区域定义为12个直接,一个间接,一个双间接,一个三间接记录区,则空间为多大。

    设1KB为block,而间接为256 * 1KB = 256K。原因每天block号码的记录会花去4bytes,因此1K的大小能够记录256条记录。

    总空间= 直接+ 间接+ 双间接+ 三间接

    总空间= 12K + 256K + 256 * 256K + 256 * 256 *256K = 16GB

    故文件系统将block格式化为1K大小时,能够容纳的最大文件为16GB。

    superblock(超级块)

    superblock是记录整个文件系统相关信息的地方,没有superblock,就没有这个文件系统了。它记录的信息主要有:

    ² block与inode的总量

    ² 未使用与已使用的inode、block数量

    ² block与inode的大小(block为1K,2K,4K;inode为128bytes);

    ² 文件系统的挂载时间、最近一次写入数据的时间、最近一次检测磁盘(fsck)的时间等文件系统的相关信息

    ² 一个valid bit数值,若此文件系统已被挂载,则valid bit为0,若未被挂载,则valid bit为1。

    superblock非常重要,因为文件系统的基本信息都写在这里,如果superblock死掉,则文件系统可能需要花费很多时间去挽救。一般superblock大小为1024bytes。相关superblock信息可以用dumpe2fs命令来查看。

    此外,每个block group都可能含有superblock。实际,除第一个block group内会含有superblock之外,后续的block group不一定含有superblock,若含有superblock则该superblock主要是作为第一个block group内superblock的备份,这样可以进行superblock的救援。

    Filesystem Description(文件系统描述说明)

    这个区段可以描述每个block group的开始与结束block号码,以及说明每个区段(superblock,bitmap,inodemap,data block)分别介于哪一个block号码之间,可以用dumpe2fs来查看。

    blockbitmap(块对照表)

    block bitmap记录那些block是空的,那些block是使用的,通过它系统可以快速地找到可使用的空间来处置文件,同时当删除文件时,文件原本占用的block号码需要释放出来,此时在block bitmap当中找到对应的该block号码的标志修改为未使用,即可。

    inodebitmap(inode对照表)

    它与block bitmao是类似的功能,只是block bitmap记录的是使用与未使用的block号码,而inode bitmap记录使用与未使用的inode号码。

    查看文件系统命令

    dumpe2fs [-bh] 设备文件名

    参数:

    ² -b:列出保留为坏道的部分(一般用不到)

    ² -h:仅列出superblock的数据,不会列出其他的区段内容。

    找出根目录磁盘文件名,并查看文件系统的相关信息

    df 可以调用目前挂载的设备

    dumpe2fs /dev/hdc2

    dumpe2fs可以查询到非常多的信息,不过依据内容主要可以区分为上半部分是superblock内容,下半部分是每个blockgroup的信息。

    与目录树的关系

    目录的内容在记录文件名,一般文件才是实际记录数据的地方。

    目录

    在Linux下的ext2文件系统新建一个目录时,ext2会分配一个inode与至少一块block给该目录。inode记录该目录的相关权限和属性,并记录分配到的哪块block号码,而block则是记录在这个目录下的文件名与该文件名占用的inode号码数据。

    查看root目录内的文件所占用的inode号码,使用如下命令:

    ls –il

    ll –d /bin /root /proc /lost+found /sbin 出现的容量时1024的倍数,原因是每个block的数量都是1K,2K,4K。

    注意:在目录下面的文件数如果太多而导致一个block无法容纳下所有的文件名与inode对照表,Linux会给予该目录多一个block来继续记录相关的数据。

    文件

    Linux下的ext2新建一个一般文件时,ext2会分配一个inode与相对于该文件大小的block数量给该文件。注意:inode仅有12个直接指向。

    目录树读取

    inode本身并不记录文件名,文件名的记录是在目录的block当中。

    当新增、删除、重命名文件时与目录的w权限有关,因为文件名是记录在目录的block中,故当读取某个文件时,就必须经过目录的inode和block,然后才能够找到那个待读取文件的inode号码,最终才会读到正确的文件的block内的数据。

    由于目录树是由根目录开始读起,因此系统通过挂载的信息可以找到挂载点的inode号码(通常一个文件系统的最顶层inode号码会从2号开始),此时就能够得到根目录的inode内容,并依据inode读取根目录的block内的文件名数据,再一层一层地往下读到正确的文件名。

    读取/etc/passwd使用如下命令:

    ll –di / /etc /etc/passwd

    上面命令的读取过程如下:

    ² /的inode:通过挂载点的信息找到/dev/hdc2的inode号码为2的根目录的inode,且inode具有权限让用户读取block的内容(r与x)

    ² /的block:经上述取得block的号码,并查看该内容有etc/目录的inode号码

    ² etc/的inode:根据inode得知用户的权限,有r与x权限时,可以读取etc/的block内容

    ² etc/:经上述取得block号码,并找到该内容的passwd文件的inode号码

    ² passwd的inode:读取inode的权限,有r权限,可以读取passwd的block内容

    ² passwd的block:最后将该block内容的数据读出来。

    文件系统大小与磁盘读取性能

    文件系统使用效率,当一个系统规划很大,如100GB这么大时,由于硬盘数据总是经常变动,整个文件系统上面的文件通常无法连续写在一起,而是填入式地将数据填入没有被使用的block当中。如果文件写入block真的分散,就会导致文件数据离散的问题。

    当文件数据太过离散,会发生读取效率低问题。解决办法:将整个文件系统内的数据全部复制出来,将该文件系统重新格式化,再将数据复制回去即可。

    如果文件系统真的太大,则当一个文件分别记录在这个文件系统的最前面后最后面的block,则会造成硬盘的机械手臂移动幅度过大,也会造成数据读取性能低。搜索整个文件系统时,花费时间较长。故分区的规划并不是越大越好,而是要针对主机的用途来进行规划。

    Ext2/Ext3文件的访问与日志文件系统的功能

    当新增一个文件,此时文件系统的行为:

    ² 先确定用户对于欲添加文件的目录是否具有w与x的权限,若有的话才能添加

    ² 根据inodebitmap找到没有使用的inode号码,并将新文件的权限/属性写入

    ² 根据blockbitmap找到没有使用中的block号码,并将实际的数据写入block中,且更新inode的block指向数据。

    ² 将刚才写入的inode与block数据同步更新inodebitmap与block bitmap,并更新superblock的内容。

    将inode table与data block称为数据存放区域,至于其他super block,block bitmap与inode bitmap等区段被称为metadata(中间数据),因为super block,inode bitmap及block bitmap的数据是经常变动的,每次添加、删除、编辑时都可能会影响到这三个部分的数据,故称为中间数据的。

    数据不一致状态

    如果在写入文件系统时,出现不明原因导致系统中断,写入的数据仅有inode table和data block,最后的同步更新中间数据步骤未完成,此时就发生中间的数据与实际数据存放区产生不一致。

    解决不一致方法:(早期Ext2)系统在重新启动时,通过superblock中记录的valid bit(是否有挂载点)与文件系统的state(clean与否)等状态来判断是否强制进行数据一致检查。检查时,以e2fsck程序进行。但此方法由于要进行中间数据与实际存放数据进行对比,并搜索整个文件系统,故很少时,从而形成了日志文件系统。

    日志文件系统

    文件系统中划出一块,专门记录写入与修订文件的步骤,具体如下:

    ² 预备:当系统要写入一个文件时,会先在日志记录某个文件准备写入的信息

    ² 实际写入:开始写入文件的权限与数据,开始更新meta data(中间数据区)的数据

    ² 结束:完成数据与metadata的更新后,在日志记录块当中完成该文件的记录。

    当文件系统发生数据不一致问题,只要去检查日志系统块就可知道哪个文件发生问题,针对该问题做一致性检查,不必针对整个文件检查,故可快速修复文件系统。

    Ext2到Ext3转换,原因如下:可利用性、数据完整性、快速及易于转换。

    Ext3的好处是:不需要去做一种长时间的、冗长乏味的且易于产生错误的备份工作及重新格式化的操作。

    Linux文件系统的操作

    所有的数据都要加载到内存后CPU才能够对该数据进行处理。如果经常编辑一个很大的文件,在编辑过程中又频繁地要系统来写入磁盘中,由于磁盘写入速度比内存慢很多,故会经常耗在等待硬盘的写入/读取上,效率低。

    为解决效率,Linux使用异步处理方式,具体如下:

    当系统加载一个文件到内存后,如果该文件没有被改动过,则在内存区段的文件数据会被设置为(clean)的。但如果内存中的文件数据被更改过了(如nano编辑过这个文件),此时该内存的数据会被设置为Dirty。此时所有的操作都换在内存中执行,并没有写入到磁盘中。系统会不定时地将内存中设置为Dirty的数据写回磁盘,以保持磁盘与内存数据的一致性。

    Linux文件系统与内存关系

    ² 系统会将常用的文件数据放置到主存储器的缓冲区,以加速文件系统的读写。

    ² Linux的物理内存最后都会被用光。这是正常情况,可加速系统性能。

    ² 可以手动使用sync来强迫内存中设置为Dirty的文件写回到磁盘中。

    ² 若正常关机时,关机命令会主动调用sync来将内存的数据回写入磁盘内。

    ² 但若不正常关机(如断电,死机或其他不明原因),由于数据尚未回写到磁盘内,因此重新启动后可能会快很多时间在进行磁盘检验,甚至可能导致文件系统的损毁(非磁盘损坏)。

    挂载点的意义

    每个文件系统都有独立的inode,block,super block等信息,这个文件系统要能够链接到目录树才能被我们使用。将文件系统与目录树结合的操作称为挂载。挂载点一定是目录,该目录为进入该文件系统的入口。故并不是有任何文件系统都能使用,必须要挂载到目录树的某个目录后,才能够使用该文件系统。

    查看/,/boot,/home的inode号码,使用如下命令:

    ls –lid / /boot /home

    同一个文件系统的某个inode只会对应到一个文件内容而已(因为一个文件占用一个inode的原因)。可通过判断inode号码来识别不同文件是相同的文件

    ls –lid / /. /..:显示内容相同,说明根目录下的 . 与 .. 是相同的东西,权限是一模一样。

    其他Linux支持的文件系统与VFS

    虽然Linux的标准文件系统是ext2,还增加了日志功能的ext3,实际Linux支持很多文件系统格式,尤其是速度快速的日志文件系统,包括SGI的XFS文件系统,可以适用于更小型文件系统Reiserfs文件系统,以及Windows的FAT文件系统等。常见支持文件系统如下:

    ² 传统文件系统:ext2/min/MS-DOS/FAT(用vfat模块)/iso9660(光盘)等;

    ² 日志文件系统:ext3/ReiserFS/Windows’NTFS/IBM’sJFS/SGI’sXFS;

    ² 网络文件系统:NFS/SMBFS;

    查看Linux支持的文件系统,使用如下命令:

    ls –l /lib/modules/$(uname –r)/kernel/fs

    系统目前加载到内存中支持的文件系统,使用如下命令:

    cat /proc/filesystems

    LinuxVFS

    Linux内核管理识别的文件系统方法:整个Linux的系统都是通过一个名为VirtualFilesystem Switch(虚拟文件系统,VFS)的内核功能去读取文件系统的。即,整个Linux认识的文件系统其实都是通过VFS在进行管理,用户不需知道每个分区上的文件系统是什么,VFS会主动帮助用户做好读取的操作。

    通过VFS管理所有的文件系统,可以省去自行设置读取文件系统的定义。

    文件系统的简单操作

    磁盘与目录的容量:df,du

    磁盘的整体数据是在superblock块中,但是每个各别文件的容量则在inode当中记载。命令行查看这些数据,使用如下命令:

    ² df:列出文件系统的整体磁盘使用量;

    ² du:评估文件系统的磁盘使用量(常用于评估目录所占容量)。

    df

    df [-ahikHTm] [目录或文件名]

    参数:

    ² -a:列出所有的文件系统,包括系统特有的/proc等文件系统;

    ² -k:以KB容量显示各文件系统

    ² -m:以MB容量显示各文件系统

    ² -h:以人们交易阅读的GB,MB,KB等格式自行显示

    ² -H:以M=1000K代替M=1024K的进位方式

    ² -T:连同该分区的文件系统名称(如ext3)也列出

    ² -i:不用硬盘容量,以inode的数量来显示

    将系统内所有文件系统列出来,使用如下命令:

    df 默认没有加任何参数,则默认会将系统内所有的(不含特殊内存内的文件系统与swap)都以1KB的容量列出来。

    将容量结果以易读的容量格式显示出来,使用如下命令:

    df –h 会以G、M等容量格式显示出来

    将系统内的所有特殊文件格式及名称都列出来,使用下列命令:

    df –aT 系统的特殊文件系统几乎都是在内存当中的,不占用硬盘空间

    将/etc下面的可用磁盘容量以易读的容量格式显示,使用如下命令:

    df –h /etc

    将目前各个分区当中可用的inode数量列出,使用如下命令:

    df –ih 显示可用inode的剩余量和总inode容量

    由于df主要读取的数据几乎都是针对整个文件系统,因此读取的范围主要是在Super block内的信息,故这个命令显示结果速度非常快速。显示结果需特别注意根目录的剩余容量,因为所有数据都是由根目录衍生而来,当根目录剩余容量为0,则Linux可能问题比较大。

    注意:如果使用-a参数,系统会出现/proc这个挂载点,但是里面的东西是0,不用紧张。/proc都是Linux系统所需加载的系统数据,而且是挂载在内存当中的,故没有占用任何的硬盘空间。

    而/dev/shm/目录(Ubuntu为/run)是利用内存虚拟出来的磁盘空间。由于通过内存虚拟出来的磁盘,故这个目录下新建任何数据文件,访问速度非常快速(内存工作),不过,由于它是内存虚拟出来的,故这个文件系统大小在每部主机都不一样,而且新建的东西在下次开机时就消失,因为在内存中。

    du

    du [-ahskm] 文件或目录名称

    参数:

    ² -a:列出所有文件与目录容量,因为默认仅统计目录下面的文件量而已

    ² -h:以人们较容易读的容量格式(G/M)显示

    ² -s:列出总量而已,而不列出每个各别的目录占用容量

    ² -S:不包括子目录下的总计,与-s有点差别

    ² -k:以KB列出容量显示

    ² -m:以MB列出容量显示

    列出目前目录下的所有文件容量,使用如下命令:

    du 默认没有任何参数,会分析目前所在目录的文件与目录所占用的硬盘空间。但是实际显示时,仅会显示目录容量(不含文件),输出的数值以1K为容量单位。

    将文件的容量也列出来,使用如下命令:

    du –a

    检查根目录下每个目录所占用的容量

    du –sm /* 其中*代表每个目录

    与df不同,du这个命令会直接到文件系统内去查找所有的文件数据。

    想列出某目录下的全部数据,或许可以加上-S的参数,减少子目录的计算。

    连接文件:ln

    在Linux中,连接文件分为两种:一种是类似于Windows的快捷方式功能的文件,可以让你快速连接到目标文件(或目录);另一种是通过文件系统的inode连接产生新文件名,而不是产生新文件,称为硬链接。

    hardlink(硬连接或实际连接)

    ² 每个文件都会有一个inode,文件内容由inode的记录来指向。

    ² 读取文件,必须经过目录记录的文件名来指向正确的inode号码才能读取。

    ² 硬链接:只是在某个目录下新建一条文件名连接到某inode号码的关联记录而已。连接到同一个inode,故文件名的所有相关信息都会一模一样。

    ln /etc/crontab . 创建实际连接的命令

    ll –i /etc/contab /root/crontab 发现inode变为2

    硬链接好处:安全。如果将任何一个文件名删除,其实inode与block都还存在。可通过另一个文件名读取正确的数据。使用任一个文件名编辑,最终结果都会写入相同的inode与block中。故均能进行数据的修改。

    硬链接设置连接文件,磁盘空间与inode的数目都不会改变。硬链接只是在某个目录下的block中多写入一个关键数据而已,既不会加inode也不会耗用block数量。

    其实,在hard link的制作中,其实还是可能会改变系统的block的,就是当添加这条数据刚好将目录的block填满时,可能会新加一个block来记录文件名关联性,而导致磁盘空间变化。不过一般hard link所用掉的关联数据量很小,故通常不会改变inode与磁盘空间的大小。

    事实上,hard link应该能在单一文件系统中进行,应该是不能够跨越文件系统才对。

    不能跨文件系统;

    不能连接到目录:原因:如果使用硬链接连接到目录时,连接的数据需要连同被连接目录下面的数据都建立连接。如果实现目录的硬链接则会很复杂,故目前还不支持目录的硬链接。

    symboliclink(符号链接,快捷方式)

    symboliclink就是在创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。由于只是利用文件来作为执行的操作,故当源文件被删除之后,symbolic link的文件会“开不了”,会一直说无法打开执行的操作。即找不到源文件文件名。

    创建一个符号链接文件连接到/etc/crontab,使用如下命令:

    ln –s /etc/crontab crontab2

    ll –I /etc/crontab /root/crontab2

    软链接的两个文件指向不同的inode号码,故是两个独立的文件存在。而且连接文件的重要内容就是它会写上目标文件的文件名。

    注意:symboliclink与windows的快捷方式可以划上等号,由symbolic link所创建的文件为一个独立的新的文件,所以会占用掉inode与block。

    硬链接限制太多,如无法做目录的硬链接,而软链接则使用较广。

    制作连接文件,需要使用ln命令。

    ln [-sf] 源文件 目标文件

    参数:

    ² -s:如果不加任何参数就进行连接,那就是硬链接,至于-s就是软链接

    ² -f:如果目标文件存在时,就主动将目标文件直接删除后在创建。

    将/etc/passwd复制到/tmp下面,并查看inode和block,使用如下命令:

    cd /tmp

    cp –a /etc/passwd .

    du –sb ; df –i .

    将/tmp/passwd制作硬链接称为passwd-hd文件,并查看文件与容量,使用如下命令:

    ln passwd passwd-hd

    du –sb; df –i .

    ls –il passwd*

    将/tmp/passwd创建一个符号链接,使用如下命令:

    ln –s passwd passwd-so

    ls –li passwd*

    将/tmp/passwd创建一个符号链接

    ln –s passwd passwd-so

    ls –li passwd*

    du –sb; df –i .

    删除源文件passwd,其他两个文件是否能够开启,使用如下命令:

    rm passwd 删除源文件

    cat passwd-hd 正常显示

    cat passwd-so 没有文件

    ll passwd*

    ln 命令,不加任何参数,就是创建硬链接。增加了硬链接后,可以发现使用ls –l时,显示link那一列属性增加。而如果删掉源文件,硬链接的内容还会与原来passwd相同,但软链接则找不到该文件。

    如果使用ln –s则与windows下创建快捷方式一样,修改Linux下的symbolic link文件时,改动的其实就是源文件。即不论源文件被连接到哪里去,只要修改了连接文件,源文件就跟着改变了。

    ls –s /bin /root/bin 如果进入/root/bin这个目录,实质就是进入/bin这个目录,因为做了连接文件。如果进入/root/bin中,将其中的数据删掉,则/bin里面的数据就统统不见了。注意:利用rm /root/bin可以删除连接文件。

    目录连接数量

    当新建一个目录时,新的目录连接数是2,而上层目录的连接数会增加1。

    测试,使用如下命令

    ls –ld /temp

    mkdir /tmp/testing1

    ls –ld /temp

    ls –ld /temp/testing1

    磁盘的分区、格式化、检验与挂载

    对于一个系统管理者(root)而言,磁盘的管理是相当重要的一环。当要在系统中增加一块硬盘时,应该做如下:

    ² 对磁盘进行分区,以新建可用的分区

    ² 对该分区进行格式化(format),以创建系统可用的文件系统

    ² 若想要仔细一点,则可对刚才新建好的文件系统进行检验

    ² 在Linux系统上,需要创建挂载点(也即是目录),并将它挂载上来。

    磁盘分区:fdisk

    fdisk [-l] 设备名称

    参数:

    ² -l:输出后面接的设备所有分区的内容。若仅有fdisk –l时,则系统将会把整个系统内能够找到的设备的分区均列出来。

    找出你在系统中的根目录所在磁盘,并查阅该硬盘内的相关信息,使用如下命令:

    df / 重点列出磁盘内的相关信息

    fdisk /dev/hdc 等待输入

    输入m 看到所有能够的操作。要离开fdisk,则按下q,不保存退出,但是按下w则操作生效退出。P是查看磁盘分区表信息状态。

    查看目前系统内的所有分区,使用如下命令:fdisk –l

    fdisk 只有root才能执行,注意:使用的设备文件名请不要加上数字,因为分区是针对整个硬盘设备而不是某个某个分区呢。如执行fdisk /dev/sda2会发生错误。使用fdisk /dev/sda即可。

    删除磁盘分区

    删除/dev/hdc全部的分区,使用如下:

    ² fdisk /dev/hdc:先进入fdisk界面

    ² p:查看一下分区的信息,假设要删掉/dev/hdc1

    ² d:这时选择要一个分区,选1

    ² w(or)q:按w可存储到磁盘数据表中,并离开fdisk,如果反悔了,直接按下q就可以取消刚才的删除操作。

    新增磁盘分区

    新增分区,对主分区、逻辑分区、扩展分区都是不同的。

    开始新增主分区,进入fdisk后,执行如下:

    ² 输入n,用来你选择主分区,与扩展分区

    ² 输入p,设置分区号

    ² 设置分区大小

    ² p此时查看分区信息

    新增扩展分区

    ² 输入n,用来你选择主分区,与扩展分区

    ² 输入e,设置分区号

    ² 设置分区大小

    ² p此查看分区信息

    新增逻辑分区

    ² 输入n,用来选择主分区,与扩展分区

    ² 输入l,设置分区号

    ² 设置分区大小

    ² p此查看分区信息

    最后按q或w(保存,一定小心,会导致系统毁坏)退出。

    1-4号尚有剩余,且系统未有扩展分区:此时可以选择主分区和扩展分区,指定1~4号间的号码

    14号尚有剩余,且系统有扩展分区:可以选择主分区和逻辑分区,主分区指定14号间的号码,逻辑分区不需要设置号码,因为系统会自动指定逻辑分区的文件名号码。

    1~4号没有剩余,且系统有扩展分区,此时直接进入逻辑分区。

    partprobe命令:强制让内核重新找一次分区表。不需要重启,否则需要重启。

    操作环境说明:以root身份进入硬盘的分区时,最好是单用户维护模式下面比较安全一些,此外,在进行分区的时候,如果该硬盘某个分区还在使用当中,那么很有可能系统内核会无法重载硬盘的分区表,解决办法是将该使用中的分区给卸载,然后再重新进入分区一遍,重新写入分区表,就可以成功。

    注意:SATA硬盘最多能够支持到15号分区,IDE则可以支持到63号,故使用SATA时,不要让分区号超过15。否则无法继续进行分区。

    fdisk没办法处理大于2TB以上的磁盘分区。当超过2TB使用parted命令。

    磁盘格式化

    分区完毕后,要进行文件系统的格式化。格式化使用命令:mkfs(make file system意思)。

    mkfs [-t 文件系统格式] 设备文件名

    参数:

    ² -t:可以接文件系统格式,如ext3,ext2,vfat等(系统有支持才会生效)。

    格式化/dev/hdc6,文件格式为ext3文件系统,使用如下命令:

    mkfs –t ext3 /dev/hdc6

    mkfs [tab][tab]:会发现mkfs支持的文件格式

    格式化过程中比较重要信息包括:文件系统的卷标(label)、block的大小以及inode的数量。

    mke2fs

    mke2fs[-b block大小] [-i block大小] [-L 卷标] [-cj] 设备

    参数:

    ² -b:可以设置每个block的大小,目前支持1K,2K,4K三种

    ² -i:多少容量基于一个inode

    ² -c:检查磁盘错误,仅下达一次-c时,会进行快速读取测试,如果下达两次-c –c的话,则测试读写(read-write)

    ² -L:后接卷标名称(label)

    ² -j:本来mke2fs是EXT2,加上-j后,会主动加入journal而成为Ext3。

    使用如下命令,建立卷标为vbird_logical,block为2048,inode为8192,构建为journal的Ext3文件系统,格式化/dev/hdc3:

    mke2f –j –L “vbird_logical” –b 2048 –i 8192/dev/hdc6

    也可以使用mke2f –t ext3命令。注意:当没有指定-j的时候,mke2fs使用ext2为格式化文件格式,若加入-j时,则格式化为ext3这个journaling的文件系统。

    磁盘检验:fsck,badblocks

    fsck

    fsck [-t 文件系统] [-ACay] 设备名称

    参数:

    ² -t:如同mkfs一样,fsck也是个综合软件,因此同样需要指定文件系统。不过现在Linux可以通过superblock去分辨文件系统。故通常不需此参数。

    ² -A:依据/etc/fstab的内容,将需要的设备扫描一次。开机执行/etc/fstab

    ² -a:自动修复检查到的有问题的扇区,所以不用一直按y。

    ² -y:-a类似,但是某些系统只支持-y这个参数

    ² -C:可以在检验的过程中使用一个直方图来显示目前的进度。

    EXT2/EXT3额外参数(e2fsck命令所提供)

    ² -f:强制检查,一般来说,如果fsck没有发现任何unclean的标志,不会主动进入细化检查的,若想强制fsck进入细化检查,使用-f标志。

    ² -D:针对文件系统下的目录进行优化配置。

    强制将新建的/dve/hdc6设备检验使用如下命令:

    fsck–C –f –t ext3 /dev/hdc6

    fsck[tab][tab]查看系统有多少文件支持的fsck软件。

    注意:通常只有身为root且你的文件系统有问题的时候才使用这个命令,否则在正常状态下使用此命令,可能会造成对系统的危害。

    由于fsck在扫描硬盘的时候,可能会造成部分文件系统的损坏,所以执行fsck时,被检查的分区务必不可挂载到系统上,即使需要在卸载的状态。系统执行fsck命令,实际上是执行e2fsck软件。

    badblocks

    badblocks –[svw] 设备名称

    参数:

    ² -s:在屏幕上列出进度

    ² -v:可以在屏幕上看到进度

    ² -w:使用写入的方式来测试,建议不要使用此参数,尤其是在检查的设备已经有文件时。

    badblocks –sv /dev/hdc6

    badblocks用于检查硬盘或软盘扇区有没有坏轨的命令。其实质是通过mke2fs –c 设备文件名在进行格式化的时候处理磁盘表面的读取测试,现在基本不使用该命令。

    磁盘挂载与卸载

    挂载点就是目录,而这个目录是进入磁盘分区(其实是文件系统)的入口。挂载前,要确定以下:

    ² 单一文件系统不应该被重复挂载在不同的挂载点(目录)中

    ² 单一目录不应该重复挂载多个文件系统

    ² 作为挂载点的目录理论上应该都是空目录才是。

    注意:如果要用来挂载的目录里面不是空的,则挂载了文件系统后,原目录下的东西就会暂时消失。消失只是暂时隐藏,当新分区卸载后,原内容会再次显示出来。

    使用挂载的命令是mount

    mount –a

    mount [-l]

    mount [-t 文件系统] [-L label名] [-c 额外选项] [-n] 设备文件名 挂载点

    参数:

    ² -a:依照配置文件/etc/fstab的数据将所有未挂载的硬盘都挂载上来

    ² -l:单纯输入mount会显示目前挂载的信息,加上-l可增列label名称。

    ² -t:与mkfs参数非常类似,可以加上文件系统种类来指定欲挂载的类型。常见的Linux支持类型有ext2,ext3,vfat,reiserfs,iso9660(光盘格式),nfs,cifs,smbfs等。

    ² -n:默认下,系统会将实际挂载的情况实时写入/etc/mtab中,以利于其他程序的运行,但某些情况(如单用户维护模式)为了避免问题,会刻意不写入,此时使用-n选项。

    ² -L:系统除了利用设备文件名(如/dev/hdc6)之外,还可以利用文件系统的卷标名称(Label)来进行挂载。最好为文件系统取一个独一无二的名称。

    ² -o:后面可接一些挂载时额外加上的参数,如账号,密码,读写权限等。

    n ro,rw:挂载文件系统为只读(ro)或可读写(rw)

    n async,sync:文件系统是否使用同步写入(sync)或异步(async)的内存机制

    n auto,noauto:分区是否以mount –a自动挂载

    n dev,nodev:是否允许此分区上可创建设备文件,dev为可允许

    n suid,nosuid:是否允许分区上有suid/sgid文件格式

    n exec,noexec:是否允许分区拥有可执行文件

    n user,nouser:是否允许分区让用户执行mount,一般mount仅有root可以进行,但使用user参数,可让一般用户user对此分区进行mount

    n defaults:默认值为rw,suid,dev,exec,auto,nouser,and async

    n remount:重新挂载,系统出错,或重新更新参数时,很有用。

    挂载Ext2/Ext3文件系统

    用默认的方式将刚刚创建的/dve/hdc6挂载到/mnt/hdc6上执行如下命令

    mkdir /mnt/hdc6

    mount /dev/hdc6 /mnt/hdc6

    df

    挂载方便原因:文件系统几乎都有superblock,Linux可以通过分析superblock搭配Linux自己的驱动程序去测试挂载,如果挂载成功,就立刻自动使用该类型的文件系统挂载起来。

    未指定文件系统类型,挂载需参考下面文件:

    ² /etc/filesystems:系统指定的测试挂载文件系统类型

    ² /proc/filesystems:Linux系统已经加载的文件系统类型。

    Linux支持的文件系统驱动程序写在下面目录中:

    /lib/modules/$(uname –r)/kernel/fs/

    查看目前以挂载的文件系统,包含个文件系统的Label名称,使用如下命令:mount –l

    挂载CD或DVD光盘

    将用来安装Linux的CentOS原版光盘挂载,使用如下命令:

    mkdir /media/cdrom

    mount –t iso9660 /dev/cdrom /media/cdrom(与下面命令二选一)

    mount –t /dev/cdrom /media/cdrom

    光驱一旦挂载后,就无法退出光盘,除非将它卸载才能够退出。

    格式化与挂载软盘

    软盘的格式化可以使用mkfs即可。但是软盘可以格式化为ext3或vfat格式。挂载的时候可以使用系统自动测试挂载即可。如果有软盘,请先放置到软盘驱动器中。

    格式化后挂载软盘到/media/floppy/目录中,使用如下命令:

    mkfs –t vfat /dve/fd0

    mkdir /media/floppy

    mount –t vfat /dev/fd0 /media/floppy

    df

    注意:整个Linux最重要的就是文件系统,而文件系统是直接挂载到目录树上头,几乎任何命令都会或多或少使用到目录树的数据,因此当然不可以随意将光盘/软盘拿出来。故软盘在卸载之后在退出。

    挂载U盘

    找出U盘设备文件名,并挂载到/mnt/flash目录中,使用如下面命令:

    fdisk –l

    mkdir /mnt/flash

    mount –t vfat-o iocharset=cp950 /dev/sda1/mnt/flash

    df

    如果带有中文文件名的数据,那么可以在挂载时指定以下挂载文件系统所用的语言。

    重新挂载根目录与挂载不特定目录

    注意:整个目录树,最重要的就是根目录,故根目录不能被卸载,但当根目录出现只读,则需重新挂载,或重启动。

    重新挂载/目录,并加入rw与auto,使用如下命令:

    mount –o remount,rw,auto/

    重点为–o remount,rw,auto/参数,注意:重新挂载时,这非常重要。

    也可使用mount来将某个目录挂载到另一个目录中去。这不是挂载系统,而是额外挂载某个目录,可以使用symbolic link来连接,但有些不支持符号链接。

    将/home这个目录暂时挂载到/mnt/home下面:

    mkdir /mnt/home

    mount –bind /home /mnt/home

    ls –lid /home/ /mnt/home

    mount -l

    mount–bind功能可以将某个目录挂载到其他目录去,而不是整个文件系统。从此进入/mnt/home就是进入/home。

    unmout(将设备文件卸载)

    umount[-fn] 设备文件名或挂载点

    参数:

    ² -f:强制卸载。可用在类似网络文件系统(NFS)无法读取到的情况

    ² -n:不更新/etc/mtab的情况下卸载。

    umount /dev/hdc6 用设备文件名来卸载

    umount /media/cdrom 用挂载点来卸载

    umount /mnt/flash 用挂载点来卸载

    umount /dev/fd0 用设备文件名俩卸载

    umount /mnt/home 一定要用挂载点,因为挂载的是目录

    离开文件系统的挂载点,即可卸载挂载,一般umount到根目录下执行。

    使用Label name进行挂载的方法

    找出/dev/hdc6的label name,并用label挂载到/mnt/hdc6,使用如下命令:

    dumpe2fs –h /dev/hdc6

    mount –L “vbird_logical” /mnt/hdc6

    上面挂载好处:系统不必知道该文件系统所在的接口与硬盘文件名。

    磁盘参数修改

    mknod

    Linux下所有设备都是文件,文件如何代表设备,使用文件的major与minor数值来替代。

    查看磁盘/dev/hdc的所有相关设备:

    ll /dev/hdc*

    磁盘文件名

    Major

    Minor

    /dev/hda

    3

    0~63

    /dev/hdb

    3

    64~127

    /dev/sda

    8

    0~15

    /dev/sdb

    8

    16~31

    硬件文件名已经可以被系统自动实时产生,根本不需要手动创建设备文件

    mknod 设备文件名 [bcp] [Major][Minor]

    参数:

    设备种类:

    ² b:设置设备名称为一个外部存储设备文件,如硬盘

    ² c:设置设备名称为一个外部输入设备文件,如鼠标、键盘灯

    ² p:设置设备名称为一个FIFO文件

    Major:主设备代码

    Minor:次设备代码

    mknod /dev/hdc10 b 22 10

    ll /dev/hdc10

    创建FIFO文件,文件名为/tmp/testpipo,使用如下命令:

    mknod /tmp/testpipe p

    ll /tmp/testpipe

    e2label

    e2label用来修改文件系统卷标。

    目前CentOS的配置文件/etc/fstab文件设置都默认使用Label name,优点缺点如下:

    ² 优点:不论磁盘文件名怎么变,不论你将硬盘插在那个IDE、SATA接口,由于系统是通过Label,所有磁盘插在哪个接口将不会有影响。

    ² 缺点:如果查了两块硬盘,刚好两块硬盘的Label有重复,就惨了,因为系统可能会无法判断哪个磁盘分区才是正确的。

    e2label 设备名称 新的Label名称

    将/dev/hdc6的卷标改成my_test,并查看是否修改成功:

    dumpe2fs –h /dve/hdc6

    e2label /dev/hdc6 “my_test”

    dumpe2fs –h /dev/hdc6

    tune2fs

    tune2fs [-jlL] 设备代号

    参数:

    ² -l:类似dumpe2fs –h功能,将super block内的数据读出来

    ² -j:将ext2的文件系统转换为ext3文件系统

    ² -L:类似e2label功能,可以修改文件系统的Label

    列出/dev/hdc6的super block内容

    tune2fs –l /dev/hdc6

    如果某个分区原本是ext2的文件系统,如果想将其更新为ext3文件系统,可以使用tune2fs就可以很简单的转换过来。

    hdparm

    如果硬盘时IDE接口,使用hdparm可以设置一些高级参数,但若为SATA接口,则不可以。

    hdparm [-icdmXTt] 设备名称

    参数:

    ² -i:将内核检测到的硬盘参数显示出来

    ² -c:设置32bit访问模式。这个32位访问模式指的是在硬盘与PCI接口之间传输的模式,硬盘本身依旧以16位模式在跑。默认这个设置被打开。建议直接使用cl即可。

    ² -d:设置是否启用DMA模式,-d1为启动,-d0为取消。

    ² -m:设置同步读取多个sector模式。设置此模式可降低系统因为读取磁盘而损耗的性能。

    ² -X:设置UtraDMA模式,其默认模式值为64。硬盘与主板芯片必须要同步,故取最小那个。一般:

    33MHz DMA mode 02(X64X66)

    66MHz DMA mode 34(X67X68)

    100MHz DMA mode5(X69)

    ² -T:测试暂存区cache的访问性能

    ² -t:测试硬盘的实际访问性能

    取得硬盘的最大同步访问sector值与目前的UDMA模式

    hdparm –I /dev/hdc

    设置最大16位/UDMA为mode5,

    hdparm –d1 –c1 –X69 /dev/hdc

    测试硬盘的读取性能

    hdparm –Tt /dev/hdc

    如果使用SATA硬盘的话,这个命令唯一可以做的就是在最后面那个测试的功能而已,虽然这样的测试不是很准确,但是一个比较的基准。

    hdparm –Tt /dev/sda /dev/sdb

    设置开机挂载

    开机挂载/etc/fstab及/etc/mtab

    开机就挂载文件,则修改/etc/fstab即可。系统挂载限制:

    ² 根目录/是必须挂载的,而且一定要先于其他mount point被挂载进来

    ² 其他挂载点必须为已创建的目录,可以任意指定,但一定要遵守必须的系统目录架构原则

    ² 所有挂载点在同一时间之内,只能挂载一次

    ² 所有分区在同一时间之内,只能挂载一次

    ² 如若进行卸载,必须先将工作目录移到挂载点(及其子目录)之外。

    查看/etc/fstab内容,使用如下命令:

    cat /etc/fstab

    其实/etc/fstab(file system table)就是将mount命令进行挂载时,将所有参数写入到这个文件中即可。此外,/etc/fstab还添加dump这个备份用的命令支持,与开机时是否进行文件系统检验命令fsck等命令。

    这个文件的六个字段非常重要:

    第一列:磁盘设备文件名或该设备的Label:

         填入文件系统的设文件名
    

    第二列:挂载点:一定是目录

    第三列:磁盘分区的文件系统:在手动挂载时可以让系统自动测试挂载,当在文件中必须手动写入文件系统才行。如ext3,reiserfs,nfs,vfat等

    第四列:文件系统参数:参加挂载命令参数

    第五列:能否被dump备份命令作用:0不能做dump备份,1每天进行dump备份,2不定日期做dump备份

    第六列:是否以fsck检验扇区:0不检验,1最早检测(根目录),2检验(晚于1)

    如果将/dev/hdc6每次开机都自动挂载到/mnt/hdc6,执行如下:

    nano /etc/fstab

    添加如下内容:

    /dev/hdc6 /mnt/hdc6 ext3 defaults 1 2

    卸载/dev/hdc6

    df

    umount /dev/hdc6

    最后进行测试,免得写的有错误,导致Linux很可能无法顺利开机

    /etc/fstab是开机时的配置文件,不过实际文件系统的挂载时记录到/etc/mtab与/proc/mounts这两个文件中。当修改出错,导致无法重启,在单用户维护模式下,执行如下命令:

    mount–n –o remount,rw /

    特殊设备loop挂载(镜像文件不刻录就挂载使用)

    挂载光盘/DVD镜像文件

    ll –h /root/centos 5.2_x86_64.iso 查看镜像文件

    mkdir /mnt/centos_dvd

    mount –o loop /root/centos 5.2_x86_64.iso/mnt/centos_dvd

    ll /mnt/centos_dvd

    umount /mnt/centos_dvd

    如上,可以做到不需将整个文件刻录成光盘或者DVD就能够读取内部的数据。

    创建大文件以制作loop设备文件

    创建大型文件

    dd if=/dev/zero of=/home/loopdev bs=1Mcount=512

    解释:if为输入文件,of为输出文件,bs为每个块大小,count为总共有多少个块。

    ll –h /home/loopdev

    dd就像在堆砖块一样,将512块,每一块1MB的砖块堆栈成一个大文件,512M。

    格式化

    mkfs–t ext3 /home/loopdev

    挂载

    mount–o loop /home/loopdev /media/cdrom/

    内存交换(swap)空间的构建

    swap功能:应付物理内存不足的情况下所造成的内存扩展记录的功能。

    CPU所读取的数据来自于内存,当内存不足的时候,为了让后续的程序可以顺利运行,在内存中暂时不使用的程序与数据就会被挪到swap中。此时内存就会空出来给需要执行的程序加载。因swap是使用硬盘放置内存信息,故用swap时,主机硬盘灯会开始闪个不停。服务器使用swap很有必要。

    使用物理分区构建swap

    新建swap分区方式步骤:

    ² 分区:先使用fdisk在磁盘中分出一个分区给系统作为swap。由于Linux的fdisk默认会将分区的ID设置为Linux的文件系统。所以可能还要设置一个System ID

    ² 格式化:利用新建swap格式的mkswap 设备文件名,就能格式化分区成为swap格式。

    ² 使用:最后将swap设备启动,方法为swapon设备文件名

    ² 查看:最终通过free这个命令来查看一下内存的使用情况。

    先进行分区的行为

    ² fdisk /dev/hdc

    ² 输入p

    ² 输入t(修改系统Id)

    ² 输入数字(swap分区号)

    ² 输入数字(更改swap的ID)

    ² 输入p显示分区

    ² 输入w保存分区并退出

    ² partprobe:让内核更新分区表

    开始构建swap格式

    ² mkswap /dev/hdc7

    开始查看与加载

    ² free

    ² swapon /dev/hdc7

    ² free

    ² swap –s(列出使用swap的设备)

    使用文件构建swap

    ² 使用dd这个命令来新增一个128MB的文件在/tmp下面

    n dd if=/dev/zero of=/tmp/swap bs=1M count=128

    n ll –h /tmp/swap

    ² 使用mkswap将/tmp/swap这个文件格式化为swap的文件格式

    n mkswap /tmp/swap

    ² 使用swapon来将/tmp/swap启动

    n free

    n swapon /tmp/swap

    n free

    n swapon –s

    ² 使用swapoff关掉swap file

    n swapoff /tmp/swap

    n swapoff /dev/hdc7

    n free

    swap使用上的限制

    swap主要的功能是当物理内容不够时,将某些内存当中所占用的程序暂时移动到swap当中,让物理内存可以被需要的程序来使用。另外,如果主机支持电源管理模式,即Linux主机系统可以进入休眠模式的话,那么,运行当中的程序状态会被记载到swap去,以作为唤醒主机的状态依据。另外,有某些程序在运行时,本来就会利用swap的特性来存放一些数据段,所以swap还是需要创建,只是不需要太大。

    swap在创建时的限制如下:

    ² 在内核2.4.10版本以后,单一swap已经没有2GB的限制了

    ² 但是,最多还是仅能创建32个swap

    ² 而且,由于目前x86_64(64位)最大内存寻址到64GB,因此swap总量最大也是仅能达64GB即可。

    文件系统的特殊查看与操作

    bootsector与super block关系

    将可安装开机信息的boot sector(启动扇区)独立出来,并非放置到superblock当中。

    boot sector应该会占用1024bytes的大小,但是整个文件系统主要依据block大小决定。superblock大小为1024bytes。superblock前面需保留1024bytes下来,可以让引导程序安装。当block为1KB,则boot sector独立于superblock

    当block大于1KB(2KB,4KB)时,第一个block内有boot sector和superblock,第一块剩余的空间保留。

    磁盘空间浪费

    使用ll –s和du –sb(m) /etc可以查看目录空间使用情况。

    利用GNU的parted进行分区行为

    fdisk命令虽然可以分区,但对于2TB以上的分区无法做到。此时需要使用parted命令。

    parted [设备] [命令 [参数]]

    参数:

    命令功能如下:

    ² 新增分区:mkpart[primary|logical|extended] [ext3|vfat] 开始 结束

    ² 分区表:print

    ² 删除分区:rm [partition]

    以parted列出目录本机的分区表资料

    parted /dev/hdc print

    新建一个约为512MB的逻辑分区

    parted /dev/hdc mkpart logical ext3 19.2 GB19.7GB

    将刚才新建的第八号磁盘分区删除

    parted /dev/hdc rm 8

    重点总结

    ² 基本上Linux最主要的文件系统为Ext2,该文件系统内的信息主要有:

    n superblock:记录此文件系统的整体信息,包括inode和block的总量,使用量,剩余量,以及文件系统的格式与相关信息等。

    n inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码

    n block:实际记录文件的内容,若文件太大时,会占用多个block

    ² Ext2文件系统的数据访问为索引式文件系统

    ² 需要碎片整理的原因是文件写入block太过于离散了,此时文件的读取的性能将会变得很差所致。这时候可以通过碎片整理将同一个文件所属的blocks汇集在一起。

    ² Ext2文件系统主要有boot sector,superblock,inode bitmap,block bitmap,inode table,data block等六大部分

    ² data block是用来放置文件内容数据地方,在Ext2文件系统中所支持的block大小有1KB,2KB,4KB三种

    ² inode记录文件的属性,权限等数据,每个inode大小均固定为128bytes,每个文件都仅占用一个inode而已,故文件系统能够新建的文件数量与inode的数量有关

    ² 文件的block记录文件的实际数据,目录的block则记录该目录下面的文件名与inode号码的对照表

    ² 日志(journal)文件系统会多出一块记录区,随时记载文件系统的主要活动,可加快系统恢复时间

    ² Linux文件系统为增加性能,会让主存储器作为大量的磁盘高速缓存

    ² 实际连接只是多了一个文件名对该inode号码的连接而已

    ² 符号链接就类似于windows的快捷方式功能

    ² 硬盘的使用必须经过分区,格式化,挂载,分别惯用的命令为fdisk,mkfs,mount

    ² 开机自动挂载可参考/etc/fstab的设置,设置完毕,务必使用mount–a测试语法正确否。

  • 相关阅读:
    win10系统封装
    docker基础知识
    TCP三次握手顺手看个示例
    磁盘挂载
    jQuary
    docker rpm包安装
    Mysql单机安装
    docker网络模式
    JavaScript DOM
    JavaScript作用域,面向对象
  • 原文地址:https://www.cnblogs.com/yhp-smarthome/p/8902478.html
Copyright © 2011-2022 走看看