《鸟哥的linux私房菜 基础篇》第八章读书笔记(下)

论坛 期权论坛 脚本     
已经匿名di用户   2022-7-2 22:16   3946   0

第八章 linux磁盘与文件系统管理

(下)讲述了文件系统的简单操作(df,du,ln等)和磁盘的分区,格式化,检验和挂载(fdisk,mkfs,mke2fs,fsck,badblocks,mount,umount,parted等)。

df [-ahikHTm] [目录或文件名] --- 列出文件系统的整体磁盘使用量
-a:列出所有的文件系统,包括系统特有的/proc等文件系统
-k:以KBytes的容量显示各文件系统
-m:以MBytes的容量显示各文件系统
-h:以人们较易阅读的GBytes,MBytes,KBytes等格式自行显示
-i:不用硬盘容量,而以inode的数量来显示

du [-ahskm] 档案或目录名称 --- 评估文件系统的磁盘使用量(常用在推估目录所占容量)
-a:列出所有的档案与目录容量
-s:列出总量而已,而不列出每隔个别的目录占用容量。
-k, -m 和df相同
直接输入du,它会分析目前所在目录,仅显示目录容量

du -sm /* 检查根目录下每个目录所占有的容量
通配符*代表每个目录

df主要读取的数据几乎都是针对一整个文件系统,它的读取范围主要是在superblock的信息
du会直接到文件系统内去搜寻所有的档案数据,因此比df慢

实体连接与符号链接
linux下有两种连接档,一种是类似windows的快捷方式功能的档案,可以快速链接到目标档案(或目录);另一种则是透过文件系统的inode连结来 产生新档名,而不是产生新档案,称为 实体连接(hard link)。多个档名对应同一个inode号码

建立实体链接指令 ln 链接的档名 新建的档名

在ls出来的结果中的属性权限后面、文件拥有者前的那个数字表示 文件硬链接数或目录的子目录数

硬链接一般不改变系统的inode和block的使用数量。除非当目录的block刚好用完一个,需要新加一个的时候
有两个限制: 不能跨filesystem;不能link目录
如果链接目录,链接的数据需要连同被连接目录底下的所有数据都要链接。造成环境相当复杂,hard link暂不支持

Symbolic Link(符号链接,即快捷方式)
只是利用档案来作为指向的动作。两个档案指向不同的inode号码,连接档的内容就是目标档案的文件名。但是当修改这个连接档时,也是在修改原始档。

ln [-sf] 来源文件(被连接的文件) 目标文件(新建的文件)
-s, symbolic link,没有-s就是hard link
-f,如果目标文件存在,则主动的将目标文件直接移除后建立

当建立一个新目录/tmp/testing时,则有/tmp/testing, . , .. 三个存在,它的link数为2,且上层目录link数要增加1(..的作用)

磁盘的分割、格式化、检验与挂载
fdisk [-l] 装置名称 : 磁盘分区(装置名称可用df命令显示)
-l : 输出后面接的装置所有的partition内容,若仅有fdisk -l时,则系统将会把整个系统内能够搜到的装置的partition均列出来
注意在装置名的时候,不要加数字,这样会出现fdisk的工作画面,m for help,即按下m就可以知道fdisk中的命令了,按照命令来操作即可
使用装置文件名不要加上数字,因为partition是针对整个硬盘装置,而不是某个partition。

在利用fdisk命令划分完分区后,按下w键会提示无法保存,需重启才能重新读取,这是因为内核仍然在使用当前旧的分区,那么如何在不重启机器的情况下使系统能够识别这些分区呢,可以使用 partprobe这个小命令。partprobe是一个可以修改kernel中分布表的工具,使kernel重新读取分区表。它包含在parted的rpm软件包中,利用rpm -q parted来判断是否安装了parted包。这个命令执行完之后不会输出任何信息而直接返回,可以使用mke2fs命令在新的分区上创建文件系统。

mkfs [-t 文件系统格式] 装置文件名 :磁盘格式化
-t : 可以接文件系统格式,例如ext3, ext2, vfat等(必须系统支持的,利用之前所说的命令 ls -l /lib/modules/$(uname -r)/kernel/fs
mkfs[tab][tab]按两下tab键,可以看到mkfs支持的文件格式。

mke2fs命令详细的设定文件系统的标头、block大小及inode数量等信息。
mke2fs [-b block大小] [-i inode大小] [-L 标头] [-cj] 装置文件名
-b :可以设定每个 block 的大小,目前支持 1024, 2048, 4096 bytes 三种;
-i :多少容量给予一个 inode 呢?
-c :检查磁盘错误,仅下达一次 -c 时,会进行快速读取测试;
如果下达两次 -c -c 癿话,会测试读写(read-write),会很慢~
-L :后面可以接标头名称 (Label),这个 label 是有用的喔!
-j :本来 mke2fs 是 EXT2 ,加上 -j 后,会主动加入 journal 而成为 EXT3。

磁盘检验
fsck [-t 文件系统] [-ACay] 装置文件名 :检查文件系统是否出错
-t:指定文件系统,linux自己可以通过superblock来分辨,所以已经不需要了
-A:依据/etc/fstab的内容,将需要的装置扫描一次(通常开机过程中就会执行此一命令)
-a:自动修复检查到的有问题的扇区,不用一直按y
-y:与-a类似,但是某些filesystem仅支持-y参数
-C:检验过程中,使用直方图来显示进度
ext2/ext3的额外选项功能(e2fsck指令提供)
-f:强制检查!一般来说,如果fsck没有发现任何unclean的旗标,不会主动进入细部检查
-D:针对文件系统下的目录进行优化配置
通常使用这个指令的场合时在系统出现极大的问题,导致你的linux开机的时候得进入单人单机模式下进行维护的行为时,才必须使用这一指令
fsck在扫描硬盘的时候,可能会造成部分filesystem的损坏,所以 执行fsck的时候,被检查的partition务必不可挂载到系统上!即需要在卸除的状态

【lost+found】目录时在当你使用fsck检查文件系统后,若出现问题时,有问题的数据会被放置到这个目录中。理论上他不会有任何数据,如果系统自动产生数据在里面,那就得注意文件系统了

badblocks -[svw] 装置名称 : 磁盘检验,检查硬盘或软盘扇区有没有坏轨
-s:在屏幕上列出进度
-v:可以再屏幕上看到进度
-w:使用写入的方式来测试,建议不要使用此参数,尤其是待检查的装置已有档案时

文件系统在挂载前,需要注意的:
  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中
  • 单一目录不应该重复挂载多个文件系统
  • 要作为挂载点的目录,理论上应该都是空目录才是

挂载命令 mount (简单解释)
-a 依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
单独mount命令显示目前挂载的信息
-t 文件系统:挂载什么类型的文件系统

/etc/filesystems:系统指定的测试挂载文件系统类型
/proc/filesystems:linux系统已经加载的文件系统类型
/lib/modules/$(uname -r)/kernel/fs/:linux支持的文件系统驱动程序都在此目录下

将根目录重新挂载,并加入参数rw与auto
mount -o remount,rw,auto /

mount还可以将某个目录挂载到另外一个目录去。在某些不支持符号链接的程序运作中,可以利用此方法。
mount --bind /home /mnt/home,将/home挂载到/mnt/home上去,但是这两个目录的inode号最后是相同的

umount [-fn] 装置文件名或挂载点:将装置档案卸除
-f:强制卸除。可用在类似网络文件系统NFS无法读取到的情况下
-n:不更新/etc/mtab情况下卸除
在umount的时候,会出现device is busy而无法卸载,这是因为你当前处在挂载点里,只要退出即可再成功卸载

改变label的名称
e2label 装置名称 新的label名称

tune2fs [-jlL] 装置代号
-l:类似dumpe2fs -h 的功能,将superblock内的数据读出来
-j: 将ext2的filesystem转换为ext3
-L:类似e2label的功能,可以修改filesystem的label

hdparm [-icdmXTt] 装置名称 :通常用来测试硬盘的效能 (具体参数的作用就不写了)
hdparm -Tt /dev/hdc 测试这个硬盘的读取效能

利用修改/etc/fstab文件来设置开机挂载的注意事项:
  • 根目录 / 是必须挂载的,而且一定要先于其他mount point被挂载进来
  • 其他mount point必须为已建立的目录
  • 所有mount point在同一时间之内,之内挂载一次
  • 所有partition在同一时间之内,之内挂载一次
  • 如若进行卸除,必须先将工作没了移到mount point及其子目录之外
/etc/fstab文件中六个字段的意义:
  1. 磁盘装置文件名或该装置的label
  2. 挂载点 mount point
  3. 磁盘分区槽的文件系统
  4. 文件系统参数 (同步/异步,自动/非自动,可擦写/只读。。。)
  5. 能否被dump备份指令作用 (可以用fstab指定哪个文件系统必须要进行dump备份,0代表不做dump备份,1代表每天都要做,2代表其他不定日期的dump动作,通常为0或1)
  6. 是否以fsck检验扇区(开机过程中,系统默认会以fsck检验filesystem是否完整,但有些filesystem是不需要检验的,比如内存置换空间swap,或者特殊文件系统如/proc,/sys等,这里可以设置0是不要检验,1表示最早检验,一般只有根目录会设为1, 2也是检验)
要添加某个文件系统进行开机即挂载,只需要在/etc/fstab文件中根据以上格式加入一行即可。再写入之后,保证这个文件系统现在没有挂载,然后利用mount -a命令将所有文件系统进行挂载(df查看),用来测试我们写的是否正确,否则在开机的时候就会出现问题。

挂载映像文件:mount -o loop /root/ccentos5.2_x86_64.iso /mnt/centos_dvd
这样iso中的数据在目录/mnt/centos_dvd中可以看见
umount /mnt/centos_dvd 卸载‘

建立大型档案(以512M为例)这样就可以在原本的分隔槽在不更动原有的环境下作出你想要的分隔槽
dd if=/dev/zero of=/home/loopdev bs=1M count=512
if是input file,输入档案,/dev/zero是会一直输出0的装置
of是output file,将一堆零写入到后面接的档案中
bs是每隔block大小,就像文件系统那样的block意义
count则是总共多少个bs
然后进行格式化:mkfs -t ext3 /home/loopdev
挂载:mount -o loop /home/loopdev /media/cdrom/

使用实体分隔槽建置swap
使用档案建置swap
在内存不够用的时候,才会用到swap,因为内存不足时,会将某些所占内存的程序移动到swap中,来腾出空间

安装到filesystem最前面的1024bytes内的区域,是boot sector,接下来是superblock。对于1K的block,则它们分别占用一个block,对于2K,4K的block,则它们一起放在同一个block里面,即block 0.

ll -s出来的total表示总耗费的block数*block的大小,在所列文件的开头的数字表示该文件耗费的block数*block大小,它们的综合等于total,但是后面的所用容量的和比total小很多,这就是浪费了。

parted 可以分割2TB这样大容量的分隔槽(小分割的话就用fdisk)
parted [装置] [指令[参数]]
新增分割:mkpart [primary|logical|extended] [ext3|vfat] 开始 结束
分割表:print
删除分割:rm [partition]



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP