Linux 文件管理系统
常见文件系统
linux 默认文件系统 Ext2, Ext3, Ext4,除此之外,还有 xfs,swap(交换分区文件系统), NFS(网络文件系统),iso9660(光盘标准文件系统),fat(windows下 fat16),vfat(windows 下 fat32),NTFS(Windows 下 NTFS),ufs,proc(基于内存的虚拟文件系统,用来管理 /proc),sysfs(基于内存的虚拟文件系统,用来管理 /sysfs),tmpfs。
Linux 识别硬盘设备和分区
Linux 初始化时,DOS 根据 MBR(Master Boot Record)识别硬盘设备。MBR 前 446 B 是 boot loader 程序,之后 64 字节是 partition table(分区表),每个表项 16 B,因此若要在一个硬盘上划分出超过 4 个分区时,需要先划扩展分区。(IDE 硬盘最多 63 分区,SCSI 最多 15 分区)
分区目的:
- 方便管理
- 提高系统效率
- 使用磁盘配额的功能限制用户使用的磁盘量
- 便于备份和恢复
查看文件系统硬盘使用情况
使用 df
命令,主要是从各文件系统的 Super block 中读取数据。
-h
:习惯单位;-a
:所有文件系统,包括特殊文件系统,如 proc、sysfs,这些文件系统大多是基于内存的虚拟文件系统,在内存中而不占用磁盘空间-T
:显示文件系统类型-i
:以 inode 数量显示容量
df -h
:用习惯单位显示系统所有文件系统信息
df -h <path>
:用习惯单位显示path
所在分区的文件系统信息
统计目录或文件所占磁盘空间大小
使用 du
命令,统计目录真正磁盘占用大小。
-h
:习惯单位;-s
:只统计总磁盘占用
挂载 Linux 系统外的文件
mount
列出系统中已挂载设备信息。
mount [-t filesystem_type] [-L label] [-o opt1[,opt2,...]] device mountpoint
-t
指定文件系统类型,不指定系统自动检测,-L
通过卷标名进行挂载,-o
指定挂载额外选项:
rw/ro
:读写权限;async/sync
:异步/同步写入;dev/nodev
:是否允许从 block 文件中读取数据;auto/noauto
:是否允许以mount -a
的方式挂载;suid/nosuid
:是否拥有 SetUID 和 SetGID 权限;exec/noexec
:是否允许可执行文件;user/nouser
:是否允许让普通用户使用mount
挂载;default
:rw,async,nodev,auto,suid,exec,nouser
remount
:重新挂载
例:
挂载U盘
fdisk -l # 查看所有磁盘信息(包括 U 盘),可查看 U 盘文件名
mkdir /mnt/usb # 建立挂载点
mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/usb # 挂载一个 Windows fat32 分区的 U 盘
cd /mnt/usb/ # 进入挂载点访问 U 盘数据
开机自动挂载硬件设备
Linux 通过 /etc/fstab
配置文件来确定开机时哪些硬盘需要挂载。该文件仅 root 用户可写。
文件中字段含义:
- 分区设备名/UUID:UUID 是一个 128 bit 的数字,由系统自动生成和管理,使用 UUID,在分区顺序改变或内核升级后,仍然保证分区正确加载。查看挂载点的链接文件名
ls -l /dev/disk/by-uuid
,也可用blkid
。 - 挂载点位置
- 文件系统名称
- 挂载参数
- 是否被 dump 备份(0 不备份,1 备份,2 不定期备份)
- 是否被 fsck 检测(0 不检测,其他是优先级,越小越高)
卸载文件系统
umount
命令用于卸载已经挂载的硬件设备,
检测和修复文件系统
fsck
命令用于检查文件系统。此命令只有 root 用户且文件系统出现问题时才使用,否则正常状况下使用 fsck
命令,可能会损坏系统。
使用 fsck
命令修改文件系统时,该文件系统对应的磁盘分区一定要处于卸载状态。
查看文件系统信息
dumpe2fs [-h] file_name
命令查看 ext 文件系统详细信息,-h
仅累成 superblock 数据信息。
tune2fs -l file_name
命令也可查看 ext 文件系统信息,信息更加友好。
给磁盘分区
fdisk
命令可用来磁盘分区。
fdisk -l
列出系统分区。
fdisk device_filename
用于给磁盘分区,输入该命令后进入交互界面,输入 m
获取帮助,
创建分区过程
运行 fdisk device_filename
后进入交互界面:
- 使用
o
创建 DOS 的 MBR 分区表(不推荐),g
创建 GPT 分区表。 n
创建新分区。(后输入p
创建主分区,输入e
创建扩展分区);然后输入分区号;输入分区起始组柱面;指定磁盘大小。w
写回并退出,q
退出不保存
格式化分区
分区完成后,需要格式化,mkfs [-t type] device
命令可对硬盘分区进行格式化,使用 -t type
设置分区的文件系统。mkfs
不能调整分区默认参数,若要调整,使用 mke2fs
。
mke2fs
参数:
-t type
指定文件系统-b block-size
指定 block 大小-i bytes-per-inode
指定多少字节分配一个 inode- ……
若无特殊需要,用 mkfs
就够了。
建立 swap 分区
Linux 中用作虚拟内存的磁盘空间被称为 swap 空间。步骤如下:
- 分区
- 格式化,使用
mkswap
命令把分区格式化为 swap 分区 - swap 分区使用:
free
命令查看内存和 swap 分区使用情况
LVM 逻辑卷管理机制
LVM 是 Logical Volume Manager 简称。建立 LVM 步骤如下:
- 物理磁盘分为分区
- 物理分区建立为物理卷(PV)
- 物理卷整合为卷组(VG)
- 卷组划分为逻辑卷(LV)
物理卷 PV
首先使用 fdisk
命令将物理磁盘分区。
然后使用 pvcreate device
命令将磁盘/分区建立为物理卷。
若要删除物理卷,则使用 pvremove device
命令删除(删除前需要先将物理卷从卷组中删除)。
使用 pvscan
命令查看系统中哪些磁盘是物理卷。pvdisplay
可查看更详细信息。
卷组 VG
使用 vgcreate [-s PE_size] vg_name pv_name1 [pv_name2]
命令建立卷组(PE_size
设置 PE 大小,若不指定默认 4MB)。
使用 vgextend vg_name pv_name
向卷组添加物理卷,vgreduce vg_name pv_name
删除物理卷,vgremove vg_name
删除卷组。
vgscan
vgs
vgdisplay
查看信息。
逻辑卷 LV
使用 lvcreate [-L vg_size] [-n lv_name] vg_name
建立逻辑卷。建立逻辑卷后,还需格式化和挂载后才能使用。逻辑卷的设备文件名是 /dev/vg_name/lv_name。
lvresize -L new_size lv_name
调整逻辑卷大小。修改后虽然逻辑卷大小改变了,但是要使用 resize2fs
命令来调整分区大小,才能让新分区大小也改变。
- 若是要增加分区大小,首先
lvresize
增加逻辑卷大小,然后resize2fs
调整对应分区大小。 - 若要减少分区大小,首先
umount
取消分区挂载,e2fsck -f
检查分区完整性,然后resize2fs
调整分区大小,mount
重新挂载分区,最后lvresize
减少 LV 大小。
lvscan
lvdisplay
查看信息。
LVM 删除
按卸载分区,然后删除 LV,VG,PV 的顺序:
umount
卸载分区lvremove
删除逻辑卷vgremove
删除卷组pvremove
删除物理卷卷标
RAID 磁盘阵列
RAID(Redundant Arrays of Inexpensive Disks)
- RAID 0,又叫带区卷,多块相同容量磁盘块,循环存储。
- RAID 1,又叫镜像卷,两块磁盘,冗余存储。
- RAID 5,在 RAID 1 的基础上添加校验值,至少需要三个磁盘块。
步骤:
- 建立分区
mdadm
命令创建 RAID- 格式化并挂载
- 建立 mdadm 配置文件(
/etc/mdadm.conf
) - 修改
/etc/fstab
设置开机自动挂载