Linux 学习之路(十):磁盘及文件系统管理
磁盘及文件系统管理
文件系统访问控制列表
setfacl
-b Remove all
-m
-k
块位图:bitmap
硬链接:多个文件的路径指向同一个inode号
软链接|符号链接:
该文件被硬链接的次数
drwxr-xr-x. 4 root root 88 9月 3 13:43 airflow
创建链接 ln [-s -v] SRC DEST
ls -i显示文件的inode号
硬链接(不带任何选项):
1.只能对文件创建,不能应用于目录;
2.不能跨文件系统;
3.创建硬链接会增加文件被硬链接的次数;
符号链接(-s):
1.可应用于目录
2.可以跨文件系统
3.不会增加被链接文件的链接次数
4.其大小为指定的路径所包含的字符个数
df:
评估一个分区磁盘块和inode的使用情况。
设备文件:
b:按块为单位,随机访问的设备
c:按字符为单位,线性设备
b:硬盘
c:键盘
/dev/
主设备号(major number)
标识设备类型
次设备号(minor number)
标识同一种类型下不同设备
主设备号和次设备号存在inode中,链接存的路径
创建设备文件:
mknod
mknod [options] name {bc} major minor
-m MODE 指定权限
mknod mydev c 23 0 在当前目录下指定一个字符设备mydev,主设备号23,次设备号0
ls -l查看
crw-r--r--. 1 root root 23, 0 10月 23 08:32 mydev
[[email protected] ~]# mknod -m 640 mydev2 c 23 1
crw-r-----. 1 root root 23, 1 10月 23 08:34 mydev2
发往设备文件的内容指向对应设备:
shell1:
[[email protected] ~]# tty
/dev/pts/0
[[email protected] ~]# echo "hello" >> /dev/pts/1
shell2:
[[email protected] ~]# tty
/dev/pts/1
[[email protected] ~]# hello
硬盘设备的设备文件名:
IDE.ATA:/dev/hd
SATA:sd
SCSI:sd
USB:sd
a,b,c…来区别同一种类型下的不同设备
IDE:
第一个IDE口:主、从
/dev/hda,/dev/hdb
第二个IDE口:主、从
/dev/hdc,/dev/hdd
hda:
hda1:第一个主分区
hda2…hda4:要么是扩展分区,要么是主分区
hda5…第一个逻辑分区
查看当前系统识别了几块硬盘
fdisk -l
[[email protected] ~]# fdisk -l
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000d6891
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM
管理磁盘分区
fdisk /dev/sda
p:显示当前硬件的分区,包括没保存的改动
n:创建新分区
e:扩展分区
p:主分区
d:删除一个分区
w:保存并退出
q:不保存退出
t:修改分区类型
L:
l:显示所支持的分区类型
Linux 支持的文件系统:
文件系统是内核中的基本功能,管理文件系统的软件在用户进程。
格式化:低级格式化创建磁道
高级格式化:mkfs -t ext3 创建文件系统
VFS:Virtual File System 虚拟文件系统
FAT32->vfat
光盘:ISO9660
网络文件系统:CIFS
Linux:ext2,ext3,ext4,xfs,reiserfs,jfs(日志文件系统),nfs,ocfs2,gfs2,swap
VFS也是内核中,每一个分区使用不同的文件系统。但都要归并在根下,即挂载或关联的方式。
只有根才可以自引用。
partprode
所有进程运行在用户模式的用户空间中。
ext3,ext4,ext2:extended
磁盘分割在创建时就已经预留起来了。
block size:1024(1k),2048,4096
bitmap:加快数据查找的数据结构
inode bitmap
block bitmap
super block:超级块,保存磁盘块中的块组,以及块组里有多少东西
块组描述符表
每一个块组都有自己的inode和bitmap
MBR不属于任何一个分区,Boot Block每一个分区第一个块,装Boot Loader.
而Boot Loader属于一个程序,放在MBR中。
Block Group 0块组0
每个组里面有一个超级块:Super Block,有备份,也可以手动恢复
GDT:Group Description Table 块组描述表:当前分区上每一个块组名,块组起始以及结束号。
逐级引用磁盘块
一个磁盘块指向一个文件,但是可以有多个路径,这些路径叫做硬链接。
ext3 <- ext2
journal file system
日志文件系统
数据区,元数据区,日志区
数据存完后,把文件从日志区挪到元数据区,要多用一次io操作。
ext3:加快文件系统修复速度。
读分区表:
cat /proc/partitons
partprobe [/dev/sda]->partx
文件系统管理
重新创建文件系统会损坏原有文件。
我创建了一个新的分区,大概有1个G
可以看到我刚才创建的扩展分区。
创建某一个分区上的文件系统:
mkfs:make file system
-t FSTYPE 指定要创建的分区
mkfs -t ext2 = mkfs.ext2
mkfs -t ext3 = mkfs.ext3
cat /proc/filesystems:查看当前内核所支持的文件系统类型
文件系统类型:
ext2
ext3
专门管理ext系列文件:
mke2fs
-j:创建ext3类型文件系统
-b BLOCK_SIZE:指定块大小,默认为4096,可用取值为1024、2048或4096
-L LABEL:指定分区卷标(Filesystem label)
-m #:指定预留给超级用户的块数百分比
-i #:用于指定为多少字节的空间创建一个inode,默认为8192,这里给出的数值应该为块大小的2^n.
-N #:指定inode个数
-F :强制创建文件系统
-E : 用于指定额外文件系统属性
blkid :查询或查看磁盘设备的相关属性
UUID:全局统一的标识符
TYPE
LABEL 卷标
e2label:用于查看或定义卷标
e2label 设备文件 卷标: 设定卷标
tune2fs:调整文件系统的相关属性
-j:不损害原有数据,将ext2升级为ext3
-L LABEL:设定或修改卷标
-m #:调整预留百分比;
-r #:指定预留块数
-o:设定默认挂载选项
facl
-c #:指定挂载次数达到#次之后进行自检,0/-1表示关闭功能。
-i #:每挂载使用多少天后进行自检,0/-1表示关闭此功能
-l:显示超级块中的信息
dumpe2fs:显示文件属性信息
-h:只显示超级块中的信息
fsck:检查并修复Linux文件系统
-t FSTYPE:指定文件系统类型
-a:自动修复
e2fsck:专用于修复ext2/ext3文件系统
-f:强制检查
-p:自动修复
挂载:将新的文件系统关联至当前根文件系统
卸载:将某文件系统从当前根文件系统的关联关系予以移除
mount:挂载
mount 设备 挂载点
设备:
设备文件 /dev/sda5
卷标:LABEL=“ ”
UUID: UUID=" "
挂载点:目录
要求:
1.此目录没有被其他进程使用
2.目录得事先存在
3.目录中得原有得文件将会暂时隐藏
挂载完成后,要通过挂载点访问对应文件系统上的文件
media 挂载移动设备
mount /dev/sda5 /mnt/test/
umount:卸载某文件系统
umount 设备
umount 挂载点
卸载注意事项:
挂载的设备没有进程使用
mount 显示当前系统上已挂载设备
mount \[options] \[-o options] DEVICE MOUNT_POINT
-a:表示挂载/etc/fstab文件中定义的所有文件系统
-n:默认情况下,mount命令每挂载一个设备,都会把挂载的设备信息保存至/etc/mtab文件,使用-n选项意味着挂载设备时,不把信息写入此文件。
-t:FSTYPE:指定正在挂载设备上的文件系统类型,不使用此选项,mount 会调用blkid命令获取对应文件系统的类型。
-r:只读挂载,挂载光盘时常用此选项
-w:读写挂载
-o:指定额外的挂载选项,也即指定文件系统启用的属性
remount : 重新挂载当前文件系统
ro:挂载为只读
rw:读写挂载
异步:数据先在内存中编辑,然后再写入硬盘中。
suid是一种不安全的做法
重新挂载时不用指定挂载点,重新挂载在原来的位置
[[email protected] ~]# mount -t auto /dev/cdrom /mnt/cdrom
mount: 挂载点 /mnt/cdrom 不存在
[[email protected] ~]# mkdir /mnt/cdrom
[[email protected] ~]# mount -t auto /dev/cdrom /mnt/cdrom
mount: /dev/sr0 写保护,将以只读方式挂载
[[email protected] ~]# unmount /mnt/cdrom
bash: unmount: 未找到命令...
[[email protected] ~]# umount /mnt/cdrom
[[email protected] ~]# mount -t auto /dev/cdrom /mnt/cdrom
mount: /dev/sr0 写保护,将以只读方式挂载
[[email protected] ~]# ls /mnt/cdrom
CentOS_BuildTag EFI EULA GPL images isolinux LiveOS Packages repodata RPM-GPG-KEY-CentOS-7 RPM-GPG-KEY-CentOS-Testing-7 TRANS.TBL
swap分区
free 查看当前系统上物理内存和交换空间的使用情况
-m
fdisk命令中,调整分区类型为82
创建交换分区:
mkswap /dev/sda8
-L LABEL
swapon /dev/sda8 启用交换分区
swapoff /dev/sda8 关闭交换分区
回环设备
loopback,使用软件来模拟实现硬件
创建一个镜像文件,120G
dd命令:
if=数据来源
of=数据存储目标
bs=1
count=2
seek=# : 创建数据文件时,跳过的空间大小
创建一个大小为1024(1G)的镜像文件,里面填满了0
dd if=/dev/zero of=/var/swapfile bs=1M count=1024
cp以文件为单位,dd复制的是底层数据流
x86:(32bit)虚拟地址、线性地址
虚拟内存:
timesharing\multiplex
CPU:time slice
Memory
I/O设备:多路复用
过载:overcommit内存过载使用
mount命令,可以挂载iso镜像
mount DEVICE MOUNT_POINT
-o loop:挂载本地回环设备
wget ftp://172.16.0.1/pub/isos/rhci-5.8-1.iso
swapon -a启用所有的定义在/etc/fstab文件中的交换设备
mount /dev/sda5 /mnt/test
文件系统的配置文件/etc/fstab
os在初始时,会自动挂载此文件中定义的每个文件系统。
要挂载的设备 挂载点 文件系统类型 挂载选项 转储频率 文件系统检测次序
/dev/mapper/cl-root / xfs defaults 0 0
转储频率表示每隔多少天对文件系统做一次完全备份,控制系统自动备份的机制。
文件系统检测次序,只有根可以为1
mount -a:挂载/etc/fstab文件中定义的所有文件系统
/etc/mtab:挂载的信息不想写在mtab.那么使用mount -n
fuser:验证进程正在使用的文件或套接字文件
-v:查看某文件上正在运行的进程
fuser -km /mnt/test 终止正在访问此挂载点的所有进程。