文件系统组成和磁盘加密
硬盘、文件系统的结构组成
Linux系统的结构
Linux文件系统基本结构:
inode table: 存储文件的元数据
inode包含文件的元信息,具体来说有以下内容:
* 文件的字节数
* 文件拥有者的User ID
* 文件的Group ID
* 文件的读、写、执行权限
* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
* 链接数,即有多少文件名指向这个inode
* 文件数据block的位置
data block:存储文件的实际数据
tune2fs /dev/sda2
查看一个文件的inode信息
在同一个挂载分区里面,任何一个文件的inode都是唯一的
在不同的挂载分区里面。比如说在A分区文件file-1的inode=123321 在B分区文件file-2的inode=123321
1.查看一个文件的inode信息
[root@centos-6-1 ~]# touch abc
[root@centos-6-1 ~]#
[root@centos-6-1 ~]#
[root@centos-6-1 ~]#
[root@centos-6-1 ~]# stat abc
File: "abc"
Size: 0 Blocks: 0 IO Block: 4096 普通空文件
Device: 802h/2050dInode: 3276813 Links: 1#这个文件的Inode值是3276813
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-06-27 08:54:59.626000297 +0800
Modify: 2017-06-27 08:54:59.626000297 +0800
Change: 2017-06-27 08:54:59.626000297 +0800
[root@centos-6-1 ~]#
2.查看每个硬盘分区的inode总数和已经使用的数量
[aaa@centos-6-1 ~]$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 6414336 38541 6375795 1% /
tmpfs 127489 1 127488 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
[aaa@centos-6-1 ~]$
3.查看abc文件的inode号码
[aaa@centos-6-1 ~]$ ls -i abc
3407881 abc
[aaa@centos-6-1 ~]$
xfs和ext性能对比
RHEL7RHEL6
Kernel kernel 3.10Kernel 2.6.32
GCCGCC 4.8GCC 4.4
AnacondaGrub 2 Grub
DesktopGnome 3Gnome 2
FirewallFirewalldIptables
Managing servicesSystemdupstart
FilesystemXFS(By Default)Ext4(By Default)
HAPacemakerCorosync/cman
Maximum Logical cpu(X86)160/5120160/4096
MaximumMemory(x86)3TB supported/64TB3TB supported/64TB
MinimumMemory1GB minimum/1TB per logical CPU recommended1GB minimum/1TB per logical CPU recommended
Maximum File Size:XFS500TB100TB
Maximum File Size:ext416TB16TB
Maximum Boot Lun Size50TB16TB(UEFI&GPT)
Maximum Per-Process Address size (x86)128TB128TB
xfs文件系统比ext文件系统的强的方面:
数据完整性
采用XFS文件系统,当意想不到的宕机发生后,由于文件系统开启了日志功能,所以磁盘上的文件不再会意外宕机而遭到破坏,不论目前文件系统上存储的文件与数据有多少,文件系统都可以根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
传输特性
xfs文件系统采用优化算法,日志记录对整体文件操作影响非常小。xfs查询与分配存储空间非常快。xfs文件系统能连续提供快速的反应时间。
可扩展性
xfs是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大小为 9EB,最大文件系统尺寸为18EB
(1EB=1024PB=1024*1024TB)
文件系统最大文件系统(TB)最大文件(TB)
xfs18874368 9437184
ext4104857616
ext3 16 2
4.传输带宽
XFS 能以接近裸设备I/O的性能存储数据。在单个文件系统的测试中,其吞吐量最高可达7GB每秒,对单个文件的读写操作,其吞吐量可达4GB每秒。
EXT4:hash index tree 2
XFS:B-tree
磁盘加密
Linux系统中有很多的磁盘设备,通常我们希望对它们进行加密,这样会更加的安全。LUKS(Linux Unified Key Setup)是标准的设备加密格式;LUKS可以对分区或者卷进行加密。注意:必须首先对加密的卷进行解密,才能挂载其中的文件系统
Linux加密设置的准备工作
工具:cryptsetup(默认已经安装)
常用参数:luksFormat 加密、luksOpen 打开映射、luksClose 关闭映射、luksAddKey 添加密钥
特点:
?加密后不能直接挂载
?加密后硬盘如果丢失,数据不会被盗
?加密后必须做映射才能挂载
思路:
cryptsetup其实是一种设备的映射关系,我们用它来把一个设备映射成另外一个设备,然后对这个新的设备进行操作,并进行加密,这样就不会使我们的原设备直接被使用,从而达到一种安全的效果。
使用cryptsetup对分区进行了加密后,这个分区就不再允许直接挂载。LUKS也是一种基于device mapper 机制的加密方案。如果要使用这个分区,必须对这个分区做一个映射,映射到/dev/mapper这个目录里去,我们只能挂载这个映射才能使用。然而做映射的时候是需要输入解密密码的
步骤如下:
1.创建分区
2.对分区加密
3. 映射分区,映射的分区名称自定义
4 格式化分区成需要的文件系统类型
5 建立挂载点,进行挂载
1.检测工具有没有安装
[root@centos-7-1 ~]# rpm -qf `which cryptsetup`
cryptsetup-1.6.7-1.el7.x86_64
[root@centos-7-1 ~]#
2.添加分区
[root@centos-7-1 ~]#
[root@centos-7-1 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x9911af25 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-104857599,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-104857599,默认为 104857599):+100M
分区 1 已设置为 Linux 类型,大小设为 100 MiB#第一块分区已经创建完成,大小为100MB
命令(输入 m 获取帮助):p#查看分区表
磁盘 /dev/sdb:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x9911af25
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 206847 102400 83 Linux
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):2
起始 扇区 (206848-104857599,默认为 206848):
将使用默认值 206848
Last 扇区, +扇区 or +size{K,M,G} (206848-104857599,默认为 104857599):+200M
分区 2 已设置为 Linux 类型,大小设为 200 MiB#添加第二块分区,大小为200MB
命令(输入 m 获取帮助):p#查看分区表
磁盘 /dev/sdb:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x9911af25
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 206847 102400 83 Linux
/dev/sdb2 206848 616447 204800 83 Linux
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
分区号 (3,4,默认 3):3
起始 扇区 (616448-104857599,默认为 616448):
将使用默认值 616448
Last 扇区, +扇区 or +size{K,M,G} (616448-104857599,默认为 104857599):+400M
分区 3 已设置为 Linux 类型,大小设为 400 MiB#创建第三块分区,大小为400MB
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): p
已选择分区 4
起始 扇区 (1435648-104857599,默认为 1435648):
将使用默认值 1435648
Last 扇区, +扇区 or +size{K,M,G} (1435648-104857599,默认为 104857599):+800M
分区 4 已设置为 Linux 类型,大小设为 800 MiB#创建第四块分区大小为800MB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x9911af25
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 206847 102400 83 Linux
/dev/sdb2 206848 616447 204800 83 Linux
/dev/sdb3 616448 1435647 409600 83 Linux
/dev/sdb4 1435648 3074047 819200 83 Linux
命令(输入 m 获取帮助):w#最后一步一定要保存,否则刚才所有配置的都将撤回
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@centos-7-1 ~]#
3.查看刚才所分的分区
[root@centos-7-1 ~]# ls /dev/sdb*
/dev/sdb /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4
[root@centos-7-1 ~]#
4.对分区进行加密
[root@centos-7-1 ~]# cryptsetup luksFormat /dev/sdb1 #对/dev/sdb1进行加密
WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.
Are you sure? (Type uppercase yes): YES#一定要大写!!!!
Enter passphrase:
Verify passphrase:
[root@centos-7-1 ~]# echo $?##验证上一个命令是否执行成功0为真,除0以外都为假
0
[root@centos-7-1 ~]#
5.对分区进行映射
注释:
映射分区:打开LUKS这个步骤是把原设备转换成/dev/mapper下的设备,赋予了它新的名字,这个过程需要输入刚才设置的密码。
本次设的密码是:linuxtouch
[root@centos-7-1 ~]# cryptsetup luksOpen /dev/sdb1 linuxtouch_disk
Enter passphrase for /dev/sdb1:
[root@centos-7-1 ~]# echo $?
0
[root@centos-7-1 ~]# ls /dev/mapper/linuxtouch_disk
/dev/mapper/linuxtouch_disk
[root@centos-7-1 ~]# ll !$
ll /dev/mapper/linuxtouch_disk
lrwxrwxrwx. 1 root root 7 6月 28 22:20 /dev/mapper/linuxtouch_disk -> ../dm-2
[root@centos-7-1 ~]#
6.查看状态
[root@centos-7-1 ~]# cryptsetup status linuxtouch_disk
/dev/mapper/linuxtouch_disk is active.
type: LUKS1
cipher: aes-xts-plain64
keysize: 256 bits
device: /dev/sdb1
offset: 4096 sectors
size: 200704 sectors
mode: read/write
[root@centos-7-1 ~]#
我们确实有了一个设备,但是记住这个设备是不能被直接使用的,必须要对它进行格式化
[root@centos-7-1 ~]# mkfs.xfs /dev/mapper/linuxtouch_disk
meta-data=/dev/mapper/linuxtouch_disk isize=256 agcount=4, agsize=6272 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=25088, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@centos-7-1 ~]# echo $?
0
[root@centos-7-1 ~]#
7.进行挂载
root@centos-7-1 ~]# mkdir /linuxtouch_disk#创建挂载目录
[root@centos-7-1 ~]# mount /dev/mapper/linuxtouch_disk /linuxtouch_disk/#挂载到/linuxtouch_disk/目录下
[root@centos-7-1 ~]# df -h#查看所有分区
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 48G 5.2G 43G 11% /
devtmpfs 482M 0 482M 0% /dev
tmpfs 497M 88K 497M 1% /dev/shm
tmpfs 497M 7.0M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/sda1 297M 149M 149M 50% /boot
tmpfs 100M 12K 100M 1% /run/user/0
/dev/mapper/linuxtouch_disk 95M 5.1M 90M 6% /linuxtouch_disk
[root@centos-7-1 ~]#
9.设置开机自动启动
这个开机自动启动和我们以前的那个不一样,因为这个盘是加密的。所以你要设置自动启动挂载,就必须创建一个密钥文件
root@centos-7-1 ~]# touch linuxtouch_passwd#创建linuxtouch_passwd文件
[root@centos-7-1 ~]# cryptsetup luksAddKey /dev/sdb1 ./linuxtouch_passwd #设置秘钥文件
Enter any passphrase: #输入密码(linuxtouch))
[root@centos-7-1 ~]# cat linuxtouch_passwd #查看密文文件文件
[root@centos-7-1 ~]#
扩展:
创建密码文件另外一种方式:
手工创建一个文件,然后赋予它指定权限
[root@centos-7-1 ~]# touch linuxtouch_pw_txt
[root@centos-7-1 ~]# chmod 644 linuxtouch_pw_txt
[root@centos-7-1 ~]# ll !$
ll linuxtouch_pw_txt
-rw-r--r--. 1 root root 0 6月 28 22:30 linuxtouch_pw_txt
配置自动启动项,编辑/etc/crypttab
[root@centos-7-1 ~]# vi /etc/crypttab
[root@centos-7-1 ~]# cat !$
cat /etc/crypttab
linuxtouch_disk /dev/sdb1 /root/linuxtouch_passwd
说明:
linuxtouch_disk为映射名称,/dev/sdb1是加密设备,/root/linuxtouch_passwd为密码文件
如果想开机手动输入密码,密码文件处空着即可,如下命令
[root@centos-7-1 ~]# vi /etc/crypttab
[root@centos-7-1 ~]# cat !$
cat /etc/crypttab
linuxtouch_disk /dev/sdb1
[root@centos-7-1 ~]#
8.开机自动挂载
[root@centos-7-1 ~]# cp /etc/fstab /etc/fstab.bak#切记修改任何配置文件都要备份
[root@centos-7-1 ~]# echo "/dev/mapper/linuxtouch_disk /linuxtouch_disk xfs defaults 0 0" >> /etc/fstab#加载到开机自动加载文件系统文件里
[root@centos-7-1 ~]#
root@centos-7-1 ~]# tail -l /etc/fstab
# /etc/fstab
# Created by anaconda on Wed Jun 28 18:01:23 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=1391b8f6-0598-48dc-882f-52255b9f8e70 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/mapper/linuxtouch_disk /linuxtouch_disk xfs defaults 0 0
[root@centos-7-1 ~]#
最后输入reboot重启命令即可