Fork me on GitHub

文件系统与磁盘的区别

磁盘是一个存储设备(切确的说是块设备),可以被划分为不同的磁盘分区。而在磁盘或者说磁盘分区上,还可以创建文件系统,并挂载到系统的某个目录中。这样,系统就可以通过这个挂载目录,来读写文件。

磁盘是存储数据的块设备,也是文件系统的载体。所以,文件系统其实还是需要通过磁盘来保证数据的持久化存储。

Linux中一切皆文件,可以通过相同的文件接口,来访问磁盘和文件(比如 open,read,write,close等)

  • 我们常说的“文件”,其实指的是普通文件
  • 而磁盘或者分区,则是指块设备文件

在读写普通文件时,I/O请求会首先通过文件系统,然后有文件系统负责与磁盘进行交互。而在读写块设备时,会跳过文件系统,直接与磁盘交互,即所谓的“裸I/O”。

这两种读写方式使用的缓存自然不同。文件系统管理的缓存,其实就是Cache的一部分。而裸磁盘的缓存,用的是Buffer.

用ls -l命令查看 /dev 目录

1
2
3
4
5
6
//块设备文件
-Port
brw-r----- 1 root operator 1, 0 2 13 10:13 disk0

//字符设备文件
crw------- 1 root wheel 18, 1 3 25 10:28 afsc_type5

  • b(block) 表示块设备文件,一般置于/dev目录下,一次传输数据为一整块的设备,如硬盘、光盘。最小数据传输单位为一个数据块(通常一个数据块的大小为 512 字节)
  • c (character)字符设备文件,一般置于/dev目录下,一次传输一个字节的设备,如字符终端,键盘等,传输数据的最小单位为一个字节。