首先这里跳过基础的磁盘知识,如磁盘的物理组成。每一个操作系统所使用的文件的属性和权限都不一样即使用的文件系统不一样,所以在对磁盘进行分区后,需要进行格式化才能被操作系统使用。以往的一个分区就是一个操作系统,而现在一个可挂载的数据就是一个文件系统。
一、文件系统是怎么工作的:
文件系统通常会将数据分别存放在不同的块,权限和属性放置到inode中,至于实际数据则存放在data block区块中,另外还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等。
每个inode与block都有编号,至于这三个数据可以简略的说明如下:
1、superblock:记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息。
2、inode:记录文件的属性,一个文件占一个inode,同时记录此文件的数据所在的block编号,可以通过ls -li显示出nodeid
3、block:实际记录文件的内容,如果文件太大会占用多个block
通常文件系统一开始就将inode和block建好了,除非格式化,否则inode和block固定后就不在变化。格式化后的磁盘系统如下所示:
文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装开机管理程序,这是个非常重要的设计,因为如此,我们就能够将不同的开机管理程序安装到个别的文件系统,而不用覆盖整颗磁盘唯一的MBR,这才能制作成多重引导的环境!!
一般inode中有12个直接、1个间接、1个双间接,1个三间接,如果一个block的大小为1k,记录每个block需要4bytes,那么一个block可以记录1024/4=256个,那么一个文件最大可为12*1k+256*1k+256*256*1k+256*256*256*1k
目录树:每一目录的block中除了该目录下的文件对于的inode,还有文件名信息。
那文件系统怎么能够被正常使用呢?这个就需要文件系统被挂载到操作系统的目录树上,挂载点一定是目录,该目录就是进入该文件系统的入口。
到目前为止,了解到文件系统是怎么一回事,但是那它又是怎么运作的呢?正如大家所了解的,内存的读取速度要比硬盘快很多,linux是这样做的,如果加载在内存的数据没有被更改过,说明该数据是clean,一旦数据被修改则被置成dirty,然后系统会定时的将数据写到硬盘。
以上是一些磁盘和文件系统的了解,下面主要介绍下文件系统的简单操作
1、查询磁盘与目录的容量:
df:列出整个文件系统的磁盘使用量,df -h
du:一般是计算目录所占容量,du -sh
2、查看系统上磁盘:
lsblk:显示磁盘信息包括,分区和文件操作系统
linux存储设备名称:
模式 | 设备 |
---|---|
/dev/fd* | 软盘驱动器 |
/dev/hd* | 老系统中的 IDE(PATA)磁盘。典型的主板包含两个 IDE 连接器或者是通道,每个连接器 带有一根缆线,每根缆线上有两个硬盘驱动器连接点。缆线上的第一个驱动器叫做主设备, 第二个叫做从设备。设备名称这样安排,/dev/hda 是指第一通道上的主设备名;/dev/hdb 是第一通道上的从设备名;/dev/hdc 是第二通道上的主设备名,等等。末尾的数字表示 硬盘驱动器上的分区。例如,/dev/hda1是指系统中第一硬盘驱动器上的第一个分区,而 /dev/hda 则是指整个硬盘驱动器。 |
/dev/lp* | 打印机 |
/dev/sd* | SCSI 磁盘。在最近的 Linux 系统中,内核把所有类似于磁盘的设备(包括 PATA/SATA 硬盘, 闪存,和 USB 存储设备,比如说可移动的音乐播放器和数码相机)看作 SCSI 磁盘。 剩下的命名系统类似于上述所描述的旧的/dev/hd*命名方案。 |
/dev/sr* | 光盘(CD/DVD 读取器和烧写器) |
一般我们会看到像/dev/sdb这样的设备,/dev/sdb指的是一整个设备,而/dev/sdb1指的是这个设备的第一分区
下面主要了解下磁盘操作的命令:
1、用 fdisk 命令操作分区:参考文档
分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁硬使用。分区表是一个硬盘分区的索引,分区的信息都会写进分区表。
fdisk命令参数介绍:fdisk /dev/sdb
p、打印分区表。
n、新建一个新分区。
d、删除一个分区。
q、退出不保存。
w、把分区写进分区表,保存并退出。
2、用 mkfs 命令创建一个新的文件系统
mkfs -t ext3 /dev/sdb1 ----------ext3为文件类型,可以对分区创建不同的文件系统
3、测试和修复文件系统
fsck-n /dev/sdb1 ----------检查文件系统错误但并不进行修复
fsck-a /dev/sdb1 ----------使用选项 -a 进行一致性检查并自动修复这些错误。也可以用 -y 替代 -a 选项。
4、直接把数据移入/出设备
dd if=input_file of=output_file [bs=block_size [count=blocks]]
例如:dd if=/dev/zero of=test.dd bs=1000K count=500;sync