首页 > 代码库 > Linux下基础命令(五)

Linux下基础命令(五)

文件系统组成和磁盘加密




硬盘、文件系统的结构组成



  

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/2050d Inode: 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性能对比


 RHEL7 RHEL6

Kernel kernel 3.10 Kernel 2.6.32

GCC GCC 4.8 GCC 4.4

Anaconda Grub 2 Grub

Desktop Gnome 3 Gnome 2

Firewall Firewalld Iptables

Managing services Systemd upstart 

Filesystem XFS(By Default) Ext4(By Default)

HA Pacemaker Corosync/cman

Maximum Logical cpu(X86) 160/5120 160/4096

Maximum Memory(x86) 3TB supported/64TB 3TB supported/64TB

Minimum Memory 1GB minimum/1TB per logical CPU recommended 1GB minimum/1TB per logical CPU recommended

Maximum File Size:XFS 500TB 100TB

Maximum File Size:ext4 16TB 16TB

Maximum Boot Lun Size 50TB 16TB(UEFI&GPT)

Maximum Per-Process Address size (x86) 128TB 128TB




xfs文件系统比ext文件系统的强的方面:


数据完整性

采用XFS文件系统,当意想不到的宕机发生后,由于文件系统开启了日志功能,所以磁盘上的文件不再会意外宕机而遭到破坏,不论目前文件系统上存储的文件与数据有多少,文件系统都可以根据所记录的日志在很短的时间内迅速恢复磁盘文件内容


传输特性

xfs文件系统采用优化算法,日志记录对整体文件操作影响非常小。xfs查询与分配存储空间非常快。xfs文件系统能连续提供快速的反应时间。


可扩展性

xfs是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大小为 9EB,最大文件系统尺寸为18EB

(1EB=1024PB=1024*1024TB)


文件系统 最大文件系统(TB) 最大文件(TB)

xfs 18874368   9437184

ext4 1048576 16

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=http://www.mamicode.com/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重启命令即可 


本文出自 “linuxtouch” 博客,请务必保留此出处http://linuxtouch.blog.51cto.com/12429083/1942870

Linux下基础命令(五)