第八章(2)

  • Linux文件系统的操作

磁盘的写入速度慢于内存,因此为解决等待磁盘的写入读取效率,采用一个异步处理(asynchronously)的方式

当系统加载一个文件到内存后,如果该文件没有被改动过,则在内存区段的文件会被设置为(clean)的。但是如果内存中的文件数据被更改了,此时该内存中的数据会被设置成为Dirty。此时所有的操作都还在内存中执行,并没有写入到磁盘中,系统会不定时地将内存中设置为Dirty地数据写回磁盘,以保持磁盘与内存数据地一致性。当然也可以用sync命令强制写回磁盘

linux上文件系统与内存间有很大关系

  1. 系统会将常用地文件数据放置到主存储器地缓冲区,以加速文件系统地读/写
  2. 承上,因此linux的物理内存最后都会被用光。这是正常情况。可加速系统性能
  3. 可以手动用sync来强迫内存中设置为Dirty的文件中写回磁盘中
  4. 若正常关机时,关机命令会主动调用sync来将内存的数据写回磁盘内
  5. 但若不正常关机,由于数据尚未写回到磁盘内,因此重新启动后可能会花很多时间进行磁盘检测,甚至可能导致文件系统的损毁。
  • 挂载点(mount point)的意义

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

同一个文件系统的某个inode只会对应到一个文件内容而已(因为一个文件占用一个inode的原因),因此我们可以通过判断inode号码来确认不同文件名是否为相同的文件。

  • 文件虚拟系统(VSF)

查看linux支持的文件系统有哪些

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

加载到内存中支持的文件系统:

cat /proc/filesystems

文件系统的简单操作

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

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

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

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

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

-k:以kb的容量显示各文件系统

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

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

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

-T:连同该分区的文件系统名称

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

  • Filesystem:代表该文件系统实在哪个分区,所以列出设备名称
  • 1k-blocks:说明下面的数字单位是1kb。可以利用-h -m改变容量
  • Used:使用掉的硬盘空间
  • Avaliable:也就是剩下的磁盘空间大小
  • Use%:就是磁盘的使用率,如果磁盘的使用率高达90%以上,要注意免得容量不足造成系统问题
  • Mountedon:就是磁盘挂载的目录所在(挂载点)
  • 由于df主要读取的数据几乎都是针对整个文件系统,因此读取的范围主要实在Super block内的信息,所以这个命令显示结果的速度非常快速,在显示的结果中需要特别留意的是那个根目录的剩余容量,因为我们所有的数据都是由根目录衍生出来的,因此当根目录的剩余容量剩下0时,linux就出问题了。

使用-a参数时候,系统会出现/proc这个挂载点,但是里面的东西都是0。/proc的东西都是linux系统所需要加载的系统数据,而且是挂载到内存当中去的,所以当然没有占用任何的硬盘空间。

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

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

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

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

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

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

-k: 以kb列出容量显示

-m:以MB列出容量显示

du命令其实会直接到文件系统内去查找所有的文件数据。默认情况下,是以kb来设计的,如果你想要知道目录占用了多少MB,那么就使用-m。如果只想知道该目录占用了多少容量,使用-s。

链接文件ln

在linux下面的链接文件有两种,一种是类似windows的快捷方式功能的文件,可以让你快速链接到目标文件或目录,另一种则是通过文件系统的inode连接来产生新文件名,而不是产生新文件,这种称为硬链接(hard link)

  • hard link(硬连接或实际连接)
  1. 每个文件都会占用一个inode,文件内容由inode的记录来指向
  2. 想要读取该文件,必须要经过目录记录的文件名来指向到正确的inode号码才能读取
  3. 也就是说,其实文件名只与目录有关,但是文件内容则与inode有关,
  4. hard link只是在某个目录下新建一条文件名连接到某inode号码的关联记录而已。
  • hard link 的限制:
  1. 不能跨文件系统
  2. 不能连接到目录

symbolic link(符号链接,快捷方式)

symbolic link就是在创建一个独立文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。由于只是利用文件来作为指向的操作,所以,源文件被删除后,symbolic link的文件会"开不了",实际上就是找不到源文件"文件名"而已。

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

-s  如果不加任何参数就进行连接,就是硬链接。-s就是symbolic link

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

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

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

对于一个系统管理者(root)而言,磁盘的管理是相当重要的一环,尤其近来硬盘已经渐渐被当成是消耗品了。如果我们想要在系统里新增一块硬盘时,需要步骤:

  1. 对磁盘进行分区,以创建系统可用的文件系统,
  2. 对该分区进行格式化,以创建系统可用的文件系统。
  3. 若想要仔细一点,则可对刚才新建好的文件系统进行检验
  4. 在linux系统上,需要创建挂载点,也即是目录,并将它挂载上来。

fdisk [-l] 设备名称

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

  • 磁盘的删除
  1. fdisk /dev/sda    先进入fdisk界面
  2. p  先看一下分区的信息,假设要删除掉/dev/hdc1
  3. d  这个时候会要你选择一个分区,
  4. w 保存操作退出    q不保存操作退出   partprobe   强制让内核重新找一次分区表
  • 磁盘的格式化
  1. 格式化的命令为mkfs(make file system)
  2. mkfs [-t 文件系统格式] 设备文件名
  3. -t  可以接文件系统格式,例如ext3,ext2,vfat等

格式化时比较重要的部分为:文件系统的卷标(lable),block的大小及inode的数量。如果要指定这些东西,就需要使用mke2fs这个命令。

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

-b  可以设置每个block的大小,

-i  一个inode给与多少容量

-c  检查磁盘错误,仅下达一次 -c时,会进行快速读取测试,下达两次 -c -c进行读写测试

-L 后面可以接卷标名称(lable)

-j  mke2fs是ext2,加上j,主动加入journal 而成为ext3

磁盘检验:fsck,badblocks

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

-t  同mkfs一样,fsck也是个综合软件,同样需要指定文件系统

-A  依据/etc/fstab的内容将需要的设备扫描一次,开机过程中就会执行此命令

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

-y  -a类似,某些文件系统仅支持-y

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

EXT2/EXT3的额外参数功能:(e2fsck这支命令提供)

-f  强制检查,一般来说,如果fsck没有发现任何wnclean的标志,不会主动进入细化检查,如果想要强制fsck进入细化检查,就得加上-f

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

磁盘的挂载与卸载

  1. 单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
  2. 单一目录不应该重复挂载多个文件系统
  3. 作为挂载点的目录理论上应该都是空目录才是

要用来挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时消失。

将文件系统挂载到我们的linux系统上,就要使用mount这个命令。

mount

  • -a   依照配置文件 /etc/fstab的数据将所有未挂载的磁盘都挂载上来
  • -l  单纯输入mount会显示目前挂载的信息,加上-l可增加列label名称
  • -t 可以加上文件系统种类来指定欲挂载的类型常见linux支持类型有ext2,ext3,vfat,reiserfs,iso9660(光盘格式)nfs,cifs,smbfs(网络文件系统类型)
  • -L  系统除了利用设备文件名外,还可以利用文件系统的卷标名称来挂载,
  • -o  后面可以接一些挂载时额外加上的参数,比如说账号密码读写权限等
  1. ro  rw   挂载文件系统成为只读,可读写
  2. async,sync  此文件系统是否使用同步写入sync  或异步(async)的内存机制,默认未async
  3. auto,noauto   允许此分区被以mount -a自动挂载
  4. dev  nodev   是否允许次分区上可创建设备文件,dev为允许
  5. suid,nosuid   是否允许此分区含有suid/sgid的文件格式
  6. exec,noexec  是否允许次分区上拥有可执行的二进制文件
  7. user, nouser  是否允许此分区让任何用户执行mount。一般来说mount仅有root可以进行,但下达user参数,则可让一般user也能够对此分区进行mount
  8. defaults  默认值为rw suid dev exec auto nouser ad  async
  9. remount  重新挂载,这在系统出错,或重新更新参数,很有用

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

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

/lib/moudles/$(uname -r)/kernel/fs/

将某个目录挂载到另外一个目录中去

mount --bind,可以将某个目录挂载到其他目录中去,而并不是整块文件系统。

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

  • -f  强制卸载,可用在类似网络文件系统无法读取到的情况下
  • -n  不更新/etc/mtab的情况下卸载

磁盘参数修改

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

linux下面所有的设备都以文件来代表,但是那个文件如何代表该设备,就是通过文件的major与minor数值来替代。所以那个major与minor数值是有特殊意义的,不是随意设置的。

b  设置设备名称成为一个外部存储设备文件,例如硬盘等

c  设置设备名称成为一个外部输入设备文件,例如鼠标/键盘等

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

Major   主设备代码

Minor   次设备代码

  • e2label   设备名称  新的label名称

卷标:windows下的c盘d盘之类的名称,就是卷标

  • tune2fs  [-jlL]  设备代号

-l  类似dumpe2fs -h,将super block内的数据读出来

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

-L  类似e2lable的功能,修改文件系统的卷标

设置开机挂载

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

系统挂载的一些限制

  1. 根目录/是必须挂载的,而且一定要先于其它mount point被挂载进来
  2. 其他挂载点必须为已新建的目录,可任意指定,但一定要遵守必需的系统目录架构原则
  3. 所有挂载点在同一时间之内,只能挂载一次
  4. 所有分区在同一时间内只能挂载一次
  5. 如若进行卸载,你必须先将工作目录移到挂载点(及其子目录之外)

其实/etc/fstab就是将我们利用mount命令进行挂载时,将所有参数写入到这个文件就可以了。这个文件共有6个字段。比较重要。

  1. 第一列:磁盘设备文件名或该设备的Label,填写文件系统的设备文件名
  2. 第二列:挂载点,就是目录
  3. 第三列:磁盘分区的文件系统:在手动挂载时可以让系统自动测试挂载,但在这个文件当中我们必须手动写入文件系统才行。
  4. 第四列:文件系统参数
  5. 第五列:能否被dump备份命令作用,dump是一个用来作为备份的命令,我们可以通过fstab指定哪个文件系统必须要进行dump备份,0代表不要做dump备份,1代表要每天进行dump的操作,2也代表其他不定日期的dump备份操作,
  6. 第6列:是否以fsck检验扇区。开机的过程中,系统默认会以fsck检验我们的文件系统是否完整。0是不要检验,1是较早检验,2也是检验。

/etc/fstab是开机时的配置文件,不过实际文件系统的挂载是记录到/etc/fstab与/proc/mounts这两个文件当中的。每次我们在改动文件系统的挂载时候,也会同时更改这两个文件。但万一/etc/fstab出错,可以mount -n -o remount,rw /

内存交换空间swap的构建

  • 使用物理分区够见swap
  1. 分区:先使用fdisk在你的磁盘中分出一个分区给系统作为swap
  2. 格式化:利用新建的swap格式的    mkswap 设备文件名  就能够格式化该分区为swap格式
  3. 使用: 最终通过free命令查看一内存使用情况

使用文件构建swap

  1. dd if=/dev/zero of=/tmp/swap bs=1M count=128
  2. mkswap将新建的文件格式化为swap文件格式
  3. swapon开启

swap主要的功能是当物理内存不够时,将某些在内存中所占的程序暂时移动到swa当中,让物理内存可以被需要的程序来使用。

大于2T的分区使用parted

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

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

分区表 print

删除分区 rm[partition]

简答题

  • 新增一块磁盘,安装好磁盘后,fdisk   新磁盘文件名,进入磁盘分区设置
  • n  新增分区,因为要分单一分区,所以点默认的,然后选择磁盘大小假设是500G,+500G
  • 分区好后,进行格式化,mkfs -t ext3 设备名
  • w写入,partprobe更新一下分区表
  • 挂载到/home目录  mount  设备名  /home
  • 修改/etc/fstab  设备名  /home  ext3  defaluts  1  2 自动挂载

先卸载?

umount  /dev/hda3

fsck  -a  /dev/hda3 

文件系统

不会改变,硬链接删除后就不存在硬连接了。

猜你喜欢

转载自blog.csdn.net/weixin_42489582/article/details/86974560
今日推荐