文件系统为操作系统提供了从硬盘中存写的0,1到在应用中用到的文件和目录之间的桥梁。
-----------------------基本的Linux文件系统------------------------------
1、ext文件系统
ext文件系统采用称作为索引节点的系统来存放虚拟目录中所有存储文件的信息,索引节点系统在每个物理设备中创建一个单独的表(称作为索引节点表)来存储这些文件的信息。存储在虚拟目录中的每一个文件在索引节点表中都有一个条目,条目名称的扩展部分来自于跟踪每个文件的额外数据。包括:文件名、文件大小、文件的属主、文件的属组、文件的访问权限、指向存有文件数据的每个硬盘块的指针。
linux通过唯一的数值(索引节点号)来引用索引节点表中的每个索引节点。这个值是在创建文件的时候由系统给定。
2、ext2文件系统
ext文件系统有限制最大文件不能超过2G,ext2是ext的升级版本。增加了最大文件为32TB,并且改变了文件在数据块中的存储方式,通过按组分配磁盘块来减轻磁盘碎片化。
3、日志文件系统
日志文件系统给linux系统增加了一层安全层,取代了之前先将数据直接写入存储设备再更新索引节点表的做法。日志文件系统会先将文件写入临时文件,然后在数据成功写到存储设备和索引节点表后在删除对应的日志条目。如果在写入的时候突然断电,重启后会读取日志条目内容再处理上次未写入的数据。目前常用的有如下三种模式:
- 数据模式:索引节点和文件都会被写入日志,丢失数据风险低,但是性能差
- 排序模式:只用索引节点数据会被写入日志,但只有数据成功写入后才删除,性能和安全性的折中。
- 回写模式:只有索引节点数据会被写入日志,但是不管文件数据何时写入,丢失数据风险高
4、ext3文件系统
ext3采用排序模式的日志功能。ext3不能恢复误删除的数据
5、ext4文件系统
处理支持数据压缩和加密,ext4文件系统还支持一个称作区段的特性
6、reiser文件系统
7、JFS文件系统
6、XFS文件系统
------------------------------------------------操作文件系统------------------------------------------------
1、显示目前所有的磁盘及分区信息:fdisk -l
[root@localhost ~]# fdisk -l
磁盘 /dev/sdb:160.0 GB, 160041885696 字节,312581808 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x624aa2e0
设备 Boot Start End Blocks Id System
/dev/sdb1 312581807 312581807 0+ 83 Linux
磁盘 /dev/sda:160.0 GB, 160041885696 字节,312581808 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00052aa4
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 312580095 155240448 8e Linux LVM
磁盘 /dev/mapper/cl-root:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/cl-swap:5234 MB, 5234491392 字节,10223616 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I /O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/cl-home:100.0 GB, 100038344704 字节,195387392 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
2、认识linux对磁盘命名的方式。
linux对于IDE的磁盘,一般命名是dev/hdx(x分别为a、b、c........),对于sata或SCSI硬盘,一般命名为dev/sdx(x分别为a、b、c........),a\b\c标识第一块、第二块、第三块
3、创建分区:fdisk /dev/sdx
- a,设置一个标识,说明这个分区是可启动的
- b,编辑BSD Unix系统用的磁盘标签
- c、设置dos兼容标识
- d、删除分区
- l、显示可用的分区类型
- m、显示命令选项
- n、添加一个新分区
- o、创建DOS分区表
- p、显示当前分区表
- q、退出,不保存更改
- s,为sun unix系统创建一个新磁盘标签
- t、修改分区的系统ID
- u、改变使用的存储单位
- v、验证分区表
- w、将分区表写入磁盘
- x、高级功能
例如新建一个分区:
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):d
已选择分区 1
分区 1 已删除
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-312581807,默认为 2048):2048
Last 扇区, +扇区 or +size{K,M,G} (2048-312581807,默认为 312581807):312581807
分区 1 已设置为 Linux 类型,大小设为 149.1 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):d
已选择分区 1
分区 1 已删除
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-312581807,默认为 2048):2048
Last 扇区, +扇区 or +size{K,M,G} (2048-312581807,默认为 312581807):312581807
分区 1 已设置为 Linux 类型,大小设为 149.1 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
例如删除一个磁盘
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):d
已选择分区 1
分区 1 已删除
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):d
已选择分区 1
分区 1 已删除
4、创建文件系统
在将数据存储到分区之前,必须用某种文件系统格式化它,这样操作系统才能使用它。每种文件系统类型都用自己的命令行程序来格式化分区,例如:
- mkefs /dev/sdxn、创建一个ext文件系统
- mke2fs /dev/sdxn、创建一个ext2文件系统
- mkfs.ext3 /dev/sdxn、创建一个ext3文件系统
- mkfs.ext4 /dev/sdxn、创建一个ext4文件系统
- mkreiserfs /dev/sdxn、创建一个reiserFS文件系统
- jfs_mkfs /dev/sdxn、创建一个JFS文件系统
- mkfs.xfs /dev/sdxn、创建一个xfs文件系统
为分区创建文件系统后,下一步是将它挂载到虚拟目录下某个挂载点,这样就可以往里面写数据了
例如:
[root@localhost /]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
9773056 inodes, 39072469 blocks
1953623 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2187329536
1193 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@localhost /]# cd mnt
[root@localhost mnt]# mkdir diskb
[root@localhost mnt]# mount -t ext4 /dev/sdb1 /mnt/diskb
[root@localhost mnt]# ls -al /mnt/diskb
总用量 20
drwxr-xr-x. 3 root root 4096 11月 22 10:23 .
drwxr-xr-x. 3 root root 19 11月 22 10:23 ..
drwx------. 2 root root 16384 11月 22 10:23 lost+found
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
9773056 inodes, 39072469 blocks
1953623 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2187329536
1193 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@localhost /]# cd mnt
[root@localhost mnt]# mkdir diskb
[root@localhost mnt]# mount -t ext4 /dev/sdb1 /mnt/diskb
[root@localhost mnt]# ls -al /mnt/diskb
总用量 20
drwxr-xr-x. 3 root root 4096 11月 22 10:23 .
drwxr-xr-x. 3 root root 19 11月 22 10:23 ..
drwx------. 2 root root 16384 11月 22 10:23 lost+found
5、如果文件系统出错了,我们可以用fsck options filesystems来检查和修复任意类型的linux文件系统
----------------------------------------------------------逻辑卷---------------------------------------------------------
有时候我们使用一块硬盘不够用,可以做的是将另外一个硬盘上的分区加到已有的文件系统来动态的给文件系统添加空间
Linux逻辑卷管理器(LVM)软件包可以用来做这个。
1、逻辑卷管理布局
逻辑卷的核心是它如何处理安装在系统上的硬盘分区,在逻辑卷管理的世界里,硬盘称作为物理卷(PV)
多个物理卷元素集中在一起可以组成一个卷组(VG),卷组可能是由分布在多个物理磁盘上的多个物理分区组成。
整个结构中的最后一层是逻辑卷(LV)
现在比较流行的是LVM2,LVM2提供了:
- 快照:最早的LVM运行将一个已有的逻辑卷在逻辑卷在线的状态下复制到另外一个设备,这个功能称作为快照(snapshot)
- 条带化:有了条带化,可以跨多个物理硬盘创建一个逻辑卷。条带化有助于提高硬盘的性能
- 镜像:镜像是一个实时更新的逻辑卷的一份完整副本
2、定义物理卷。在建立好分区后,在fdisk命令里给参数t
[root@localhost /]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):1
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux LVM”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):2
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux LVM”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:160.0 GB, 160041885696 字节,312581808 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x624aa2e0
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 112581807 56289880 8e Linux LVM
/dev/sdb2 112582656 312581807 99999576 8e Linux LVM
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):1
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux LVM”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):2
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux LVM”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:160.0 GB, 160041885696 字节,312581808 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x624aa2e0
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 112581807 56289880 8e Linux LVM
/dev/sdb2 112582656 312581807 99999576 8e Linux LVM
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
3、创建卷组
没有固定的规则说一定要为系统创建多少卷组,可以将所有可用的物理卷加到一个卷组,也可以任意组合。vggreate name /dev/sdxn创建卷组。vgdisplay显示卷组
例如:
[root@localhost /]# vgcreate lvmtest /dev/sdb1
WARNING: xfs signature detected on /dev/sdb1 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/sdb1.
Physical volume "/dev/sdb1" successfully created.
Volume group "lvmtest" successfully created
[root@localhost /]# vgdisplay
--- Volume group ---
VG Name lvmtest
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 53.68 GiB
PE Size 4.00 MiB
Total PE 13742
Alloc PE / Size 0 / 0
Free PE / Size 13742 / 53.68 GiB
VG UUID czRH5x-JC6I-9IZX-cSl2-lelm-ONzC-bbEfeH
--- Volume group ---
VG Name cl
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size 148.05 GiB
PE Size 4.00 MiB
Total PE 37900
Alloc PE / Size 37899 / 148.04 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID HarMPD-BfJd-shcC-VqSo-Tno0-CNYI-go4Kyu
WARNING: xfs signature detected on /dev/sdb1 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/sdb1.
Physical volume "/dev/sdb1" successfully created.
Volume group "lvmtest" successfully created
[root@localhost /]# vgdisplay
--- Volume group ---
VG Name lvmtest
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 53.68 GiB
PE Size 4.00 MiB
Total PE 13742
Alloc PE / Size 0 / 0
Free PE / Size 13742 / 53.68 GiB
VG UUID czRH5x-JC6I-9IZX-cSl2-lelm-ONzC-bbEfeH
--- Volume group ---
VG Name cl
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size 148.05 GiB
PE Size 4.00 MiB
Total PE 37900
Alloc PE / Size 37899 / 148.04 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID HarMPD-BfJd-shcC-VqSo-Tno0-CNYI-go4Kyu
4、创建逻辑卷:lvcreate创建,lvdisplay显示
- -c chunksize、指定快照逻辑卷的单位大小
- -C contiguous、设置或重置连续分配策略
- -i stripes、指定条带数
- -I stripesize、指定每个条带的大小
- -l extents、指定分配给新逻辑卷的逻辑块数,或者要用的逻辑块的百分比
- -L size、指定分配给新逻辑卷的硬盘大小
- -m mirrors、创建设备的镜像数
- -M persistent、让次设备好一直有效
- -n name、指定新逻辑卷的名称
- -p permission、为逻辑卷设置读、写权限
- -r readahead、设置预读扇区数
- -R regionsize、指定将镜像分为多大的区
- -s snapshot、创建镜像逻辑卷
- -Z zero、设置在新逻辑卷的前1KB数据为零
root@localhost /]# lvcreate -l 100%FREE -n LVTEST lvmtest
Logical volume "LVTEST" created.
[root@localhost /]# lvdisplay
--- Logical volume ---
LV Path /dev/lvmtest/LVTEST
LV Name LVTEST
VG Name lvmtest
LV UUID PwlyBe-mxZ9-jQMU-8Ds5-VDKP-R4M8-Cb3Um7
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2017-11-22 11:42:23 +0800
LV Status available
# open 0
LV Size 53.68 GiB
Current LE 13742
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:3
Logical volume "LVTEST" created.
[root@localhost /]# lvdisplay
--- Logical volume ---
LV Path /dev/lvmtest/LVTEST
LV Name LVTEST
VG Name lvmtest
LV UUID PwlyBe-mxZ9-jQMU-8Ds5-VDKP-R4M8-Cb3Um7
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2017-11-22 11:42:23 +0800
LV Status available
# open 0
LV Size 53.68 GiB
Current LE 13742
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:3
5、创建文件系统
运行lvcreate后,逻辑卷已经创建好,但是没有文件系统,所以需要给逻辑卷创建文件系统:
[root@localhost /]# mkfs.xfs //dev/lvmtest/LVTEST
meta-data=//dev/lvmtest/LVTEST isize=512 agcount=4, agsize=3517952 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=14071808, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=6871, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
meta-data=//dev/lvmtest/LVTEST isize=512 agcount=4, agsize=3517952 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=14071808, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=6871, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
6、挂载到某个点
[root@localhost /]# mkdir /mnt/LVDISK
[root@localhost /]# mount -t xfs /dev/lvmtest/LVTEST /mnt/LVDISK
[root@localhost /]# mount -t xfs /dev/lvmtest/LVTEST /mnt/LVDISK
7、修改LVM
- vgchange、激活和禁用卷组
- vgremove、删除卷组
- Vgextend、将物理卷加到逻辑卷
- Vgreduce、从卷中删除物理卷
- lvextend、增加逻辑卷的大小
- lvreduce、减小逻辑卷的大小