创建文件系统
文件系统控制数据的读写,他类似与编码和解码系统。如果没有文件系统,存储介质中的信息就是 1 0 这样无意义的数据,而文件系统就是让他们有意义。
文件系统允许用户在保存数据时不必关心数据实际保存在硬盘的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上哪个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。
文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型。
文件系统类型
文件系统有众多的类型,在不同的操作系统和应用下使用的文件系统也有所区别。
- 磁盘文件系统(disk file system): 传统意义上的文件系统,像 ext btrfs NTFS FAT exFAT 等都是这类系统
- 光盘(Optical discs): 目前主流的是 ISO 9660 和 UDF(Universal Disk Format)
- 数据库文件系统(Database file system): 像 SQLite 这样的就是,他是二进制安全的,也就是说在 SQLite 文件复制到不同的文件系统中都是可用的
- 网络文件系统(Network file system): 目前主流的是 NFS SMB 和 AFS,FTP 和 WebDAV 也算是
- 其他: 例如 procfs,他在 Linux 的内存映射
文件系统是非常宽泛的,只要是能够存储和访问数据都算是一个文件系统。例如 git 内部就实现了一个小型的文件系统。
文件系统支持库
磁盘文件系统:
文件系统 | 创建命令 | 工具 | 说明 |
---|---|---|---|
btrfs | mkfs.btrfs | btrfs-progs | 可靠性高 |
vfat | mkfs.fat | dosfstools | 兼容性非常好,不过有最大 4G 文件限制 |
exfat | mkfs.exfat | exfatprogs | fat的扩展,支持大于 4G 文件 |
ext4 | mkfs.ext4 | e2fsprogs | Linux 标准文件系统 |
NTFS | mkfs.ntfs | ntfs-3g | Windows 的标准文件系统 |
xfs | mkfs.xfs | xfsprogs |
网络文件系统:
网络文件系统 | 工具 | 说明 |
---|---|---|
NFS | nfs-common | Windows 中由于 utf-8 的问题兼容性不太好 |
SMB | cifs-utils | 兼容性比较好的网络文件系统 |
创建文件系统
使用mkfs命令来创建文件系统,它实际上是一个前端命令,文件系统支持包都会为该命令提供真正可用的后端程序。该命令有两种使用方式:
查看文件系统
可以使用blkid检测所有块设备的文件系统,以及 LABEL 或 UUID 数据:
Bash
yangguodong@debian:~$ sudo blkid
/dev/nvme0n1p3: UUID="afe0602b-2ea5-42be-a705-aec0afa09a93" TYPE="swap" PARTUUID="113563b3-32d4-44c5-a1be-e0130328cf85"
/dev/nvme0n1p1: UUID="CE8B-3F07" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="215779ee-6e43-4de5-87be-ca2765d536e7"
/dev/nvme0n1p4: UUID="ee997c25-faa9-44f8-8f98-374f78013721" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="721b3ced-5d9f-4b9c-8c74-affeb50c5a97"
/dev/nvme0n1p2: UUID="7b0f2541-3a8f-4e50-a970-8943656621af" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="4dd72d5c-8dbd-433e-a6d0-670d17e16adf"
/dev/nvme1n1p1: UUID="97d521c1-b5b7-4650-8897-3c304deb8227" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="duckdb" PARTUUID="0be997ae-f5c9-442f-8c27-e504f8e8dd3f"
如果想要获取某一个块设备的信息,可以使用lsblk来实现,使用 lsblk --fs
来查看文件系统预览(比 blkid 直观些):
Bash
(own) yangguodong@debian:~$ sudo lsblk -fs /dev/nvme0n1p4
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
nvme0n1p4 ext4 1.0 ee997c25-faa9-44f8-8f98-374f78013721 510G 1% /home
└─nvme0n1
如果不跟设备就是整个系统范围的
还有就是findmnt能够搜索所有已经挂载的文件系统:
Bash
yangguodong@debian:~$ sudo findmnt
TARGET SOURCE FSTYPE OPTIONS
/ /dev/nvme0n1p2 ext4 rw,relatime,errors=remount-ro
├─/sys sysfs sysfs rw,nosuid,nodev,noexec,relatime
│ ├─/sys/kernel/security securityfs securityf rw,nosuid,nodev,noexec,relatime
│ ├─/sys/fs/cgroup cgroup2 cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate,me
│ ├─/sys/fs/pstore pstore pstore rw,nosuid,nodev,noexec,relatime
│ ├─/sys/firmware/efi/efivars efivarfs efivarfs rw,nosuid,nodev,noexec,relatime
│ ├─/sys/fs/bpf bpf bpf rw,nosuid,nodev,noexec,relatime,mode=700
│ ├─/sys/kernel/debug debugfs debugfs rw,nosuid,nodev,noexec,relatime
│ ├─/sys/kernel/tracing tracefs tracefs rw,nosuid,nodev,noexec,relatime
│ ├─/sys/kernel/config configfs configfs rw,nosuid,nodev,noexec,relatime
│ └─/sys/fs/fuse/connections fusectl fusectl rw,nosuid,nodev,noexec,relatime
├─/proc proc proc rw,nosuid,nodev,noexec,relatime
│ └─/proc/sys/fs/binfmt_misc systemd-1 autofs rw,relatime,fd=29,pgrp=1,timeout=0,minproto=5
│ └─/proc/sys/fs/binfmt_misc binfmt_misc binfmt_mi rw,nosuid,nodev,noexec,relatime
├─/dev udev devtmpfs rw,nosuid,relatime,size=65887268k,nr_inodes=1
│ ├─/dev/pts devpts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmx
│ ├─/dev/shm tmpfs tmpfs rw,nosuid,nodev,inode64
│ ├─/dev/mqueue mqueue mqueue rw,nosuid,nodev,noexec,relatime
│ └─/dev/hugepages hugetlbfs hugetlbfs rw,relatime,pagesize=2M
├─/run tmpfs tmpfs rw,nosuid,nodev,noexec,relatime,size=13184200
│ ├─/run/lock tmpfs tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k,in
│ ├─/run/credentials/systemd-sysusers.service
│ │ ramfs ramfs ro,nosuid,nodev,noexec,relatime,mode=700
│ ├─/run/credentials/systemd-tmpfiles-setup-dev.service
│ │ ramfs ramfs ro,nosuid,nodev,noexec,relatime,mode=700
│ ├─/run/rpc_pipefs sunrpc rpc_pipef rw,relatime
│ ├─/run/credentials/systemd-tmpfiles-setup.service
│ │ ramfs ramfs ro,nosuid,nodev,noexec,relatime,mode=700
│ ├─/run/credentials/systemd-sysctl.service
│ │ ramfs ramfs ro,nosuid,nodev,noexec,relatime,mode=700
│ └─/run/user/1000 tmpfs tmpfs rw,nosuid,nodev,relatime,size=13184200k,nr_in
│ ├─/run/user/1000/gnome-remote-desktop/cliprdr-LE69dA
│ │ /dev/fuse fuse rw,nosuid,nodev,relatime,user_id=1000,group_i
│ ├─/run/user/1000/gvfs gvfsd-fuse fuse.gvfs rw,nosuid,nodev,relatime,user_id=1000,group_i
│ └─/run/user/1000/doc portal fuse.port rw,nosuid,nodev,relatime,user_id=1000,group_i
├─/home /dev/nvme0n1p4 ext4 rw,relatime
├─/boot/efi /dev/nvme0n1p1 vfat rw,relatime,fmask=0077,dmask=0077,codepage=43
└─/mnt 192.168.1.200:/volume1
nfs4 rw,relatime,vers=4.1,rsize=131072,wsize=13107
└─/mnt/duckdb-data 192.168.1.200:/volume1/duckdb-data
nfs4 rw,relatime,vers=4.1,rsize=131072,wsize=13107