2018-08-04笔记

一.df命令

df - 报告文件系统磁盘空间的使用情况
man df查看关于df命令的用法

参数

GNU 参数说明
       -a, --all
              列出包括BLOCK为0的文件系统

       --block-size=SIZE use SIZE-byte blocks
              指定块的大小

       -h,--huma-readable"
              用常见的格式显示出大小(例如:1K 234M 2G)

       -H,--si"
              同上,但是这里的1k等于1000字节而不是1024字节

       -i, --inodes
              用信息索引点代替块表示使用状况
       -l, --local
              只显示本地文件系统使用状况

       -m, --megabytes
              以指定块大小等于1048576字节(1M)来显示使用状况

       --no-sync
              在取得使用信息前禁止调用同步 (default)

       -P, --portability
              使用POSIX格式输出

       --sync 在取得使用信息前调用同步

       -t, --type=TYPE
              只显示指定类型(TYPE)的文件系统
       -T, --print-type
              输出每个文件系统的类型

       -x, --exclude-type=TYPE
              只显示指定类型(TYPE)之外的文件系统.

       -v (忽略)

       --     输出该命令的帮助信息并退出

       --version
              输出版本信息并退出

在系统里直接输入df

[root@linux7-128 ~]# df
文件系统          1K-块    已用     可用 已用% 挂载点
/dev/sda3      27043944 3508360 23535584   13% /
devtmpfs         494236       0   494236    0% /dev
tmpfs            504088       0   504088    0% /dev/shm
tmpfs            504088    7208   496880    2% /run
tmpfs            504088       0   504088    0% /sys/fs/cgroup
/dev/sda1        201380   99176   102204   50% /boot
tmpfs            100820       0   100820    0% /run/user/0

Linux的磁盘是不能够直接访问的,必须要有一个挂载点,根据挂载点才能找到磁盘,读写数据。

常见用法

  1. df -h 用常见的格式显示出大小(例如:1K 234M 2G)
    和只用df命令相比,数据大小有了变化。
[root@linux7-128 ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        26G  3.4G   23G   13% /
devtmpfs        483M     0  483M    0% /dev
tmpfs           493M     0  493M    0% /dev/shm
tmpfs           493M  7.1M  486M    2% /run
tmpfs           493M     0  493M    0% /sys/fs/cgroup
/dev/sda1       197M   97M  100M   50% /boot
tmpfs            99M     0   99M    0% /run/user/0
  1. df -H
    这里显示的单位换算是1K=1000字节,而df -h使用的是1K=1024字节
[root@linux7-128 ~]# df -H
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        28G  3.6G   25G   13% /
devtmpfs        507M     0  507M    0% /dev
tmpfs           517M     0  517M    0% /dev/shm
tmpfs           517M  7.4M  509M    2% /run
tmpfs           517M     0  517M    0% /sys/fs/cgroup
/dev/sda1       207M  102M  105M   50% /boot
tmpfs           104M     0  104M    0% /run/user/0

知识点1
我们在安装操作系统时,只给系统划分了/ 、/boot、 /sawp三个分区,但是这里使用df命令却看到下面有很多挂载点,例如/dev、
/dev/shm、/run这些,事实上这些含有tmpfs的文件系统,都是临时的文件系统。在这些挂载点里即使写了东西,重启之后也会消失。
/dev/shm是内存,读写速度会很快,大小是物理内存的一半。
知识点2
如何查看/swap大小?

[root@linux7-128 ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1008176      152488      677512        7208      178176      687544
Swap:       4194300           0     4194300
  1. df -i 查看分区有多少个Inode以及使用情况
[root@linux7-128 ~]# df -i
文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点
/dev/sda3      13528576  126031 13402545       1% /
devtmpfs         123559     387   123172       1% /dev
tmpfs            126022       1   126021       1% /dev/shm
tmpfs            126022     515   125507       1% /run
tmpfs            126022      16   126006       1% /sys/fs/cgroup
/dev/sda1        102400     328   102072       1% /boot
tmpfs            126022       1   126021       1% /run/user/0

inode多少是跟磁盘大小有关系的,分区后提前就规划好了。
inode满了即使磁盘还有空间,也写不进去东西。所以有时候如果磁盘还有空间,但是写不进去东西,可以使用df -i查看inode使用情况。
4. df -m以兆为单位,查看文件系统大小

文件系统       1M-块  已用  可用 已用% 挂载点
/dev/sda3      26411  3427 22984   13% /
devtmpfs         483     0   483    0% /dev
tmpfs            493     0   493    0% /dev/shm
tmpfs            493     8   486    2% /run
tmpfs            493     0   493    0% /sys/fs/cgroup
/dev/sda1        197    97   100   50% /boot
tmpfs             99     0    99    0% /run/user/0

二.du命令

简介

du - 报告磁盘空间使用情况
报告指定的文件已使用的磁盘空间的总量,包括在层次结构中以这些以指定文件为根的目录在内。这里的“已使用的磁盘空间”意思为指定的文件下的整个文件层次结构所使用的空间。在没给定参数的情况下,du 报告当前目录所使用的磁盘空间。

参数

-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-D或--dereference-args 显示指定符号连接的源文件大小。
-h或--human-readable 以KMG为单位,提高信息的可读性。
-H或--si 与-h参数相同,但是KMG是以1000为换算单位。
-k或--kilobytes 以1024 bytes为单位。
-l或--count-links 重复计算硬件连接的文件。
-L<符号连接>或--dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
-m或--megabytes 以1MB为单位。
-s或--summarize 仅显示总计。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
--max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
--help 显示帮助。
--version 显示版本信息。

用法

  1. du -s
    显示当前目录的总和已使用的磁盘空间
[root@linux7-128 ~]# du -s
21936   .
[root@linux7-128 ~]# du -s /root
21936   /root

默认单位为K
2. du -sh
显示单位,提高可读性

[root@linux7-128 ~]# du -sh /root
22M /root
[root@linux7-128 ~]# du -sh
22M .
[root@linux7-128 ~]# du -sh /etc/passwd
4.0K    /etc/passwd

知识点

[root@linux7-128 ~]# du -sh /etc/passwd
4.0K    /etc/passwd
[root@linux7-128 ~]# ls -lh !$
ls -lh /etc/passwd
-rw-r--r-- 1 root root 2.4K 518 20:55 /etc/passwd

当我们使用du和ls查看文件时,发现大小是不一样的。du -sh查询出来是4K,ls -lh查询出来是2.4K。这是为什么?
因为ls -lh查询出来的是文件本身大小,而du -sh查询出来是占用磁盘空间多少。这里有一个“块”的概念,后面会讲到。

三.磁盘分区

虚拟机增加硬盘

右键打开虚拟机设置,点击添加
image
选择硬盘,点击下一步

使用默认配置,点击下一步

默认选择创建新虚拟磁盘,点击下一步

将大小更改为10G,其余不需要改变,点击第一步

点击完成


可以看到这里已经新加了一块硬盘

服务器是支持热插拔的,可以自动识别。虚拟机里是不能自动识别的,要想识别到新添加的硬盘需要重启

查看新增磁盘

fdisk -l
查看系统磁盘

[root@linux7-128 ~]# fdisk -l

磁盘 /dev/sda:32.2 GB, 32212254720 字节,62914560 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a8d21

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648     8800255     4194304   82  Linux swap / Solaris
/dev/sda3         8800256    62914559    27057152   83  Linux

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

这里可以看到下面有一个磁盘 /dev/sdb,这就是我们刚才新增的磁盘。
知识点
hd大多是IDE硬盘;sd大多是SCSI或移动存储;

parted划分GPT分区

parted命令可以划分单个分区大于2T的GPT格式的分区,也可以划分普通的MBR分区,fdisk命令对于大于2T的分区无法划分(大于2.2TB的存储空间用fdisk不支持,需要采用parted来分区),所以用fdisk无法看到parted划分的GPT格式的分区。

我们在课上讲的fdisk分区工具,它的分区格式为MBR,特点是,最多分4个主分区,磁盘大小不能超过2T。而GPT分区格式,突破了这些限制,它没有主分区、扩展分区、逻辑分区之分,在一块磁盘上最多可以分128个分区出来,支持大于2T的分区,最大卷可达18EB。 相信,随着存储级别的升级,将来的分区格式逐渐会淘汰MBR,而GPT成为主流。

  • 两种模式
    1、命令行模式: parted [option] device [command] ,该模式可以直接在命令行下对磁盘进行分区操作,比较适合编程应用。
    2、交互模式:parted [option] device 类似于使用fdisk /dev/xxx
  • 分区类型
    MBR:MBR分区表(即主引导记录)大家都很熟悉。所支持的最大卷:2T,而且对分区有限制:最多4个主分区或3个主分区加一个扩展分区
    GPT: GPT(即GUID分区表)。是源自EFI标准的一种较新的磁盘分区表结构的标准,是未来磁盘分区的主要形式。与MBR分区方式相比,具有如下优点。突破MBR 4个主分区限制,每个磁盘最多支持128个分区。支持大于2T的分区,最大卷可达18EB。
  • 使用方法
    parted [options] [device [command [options...]...]]
 options

    -h  显示帮助信息

    -l  显示所有块设备上的分区

    device

    对哪个块设备进行操作,如果没有指定则使用第一个块设备

    command [options...]

    check partition  

    对分区做一个简单的检测

    cp [source-device] source dest  

    复制source-device设备上的source分区到当前设备的dest分区

    mklabel label-type 

    创建新分区表类型,label-type可以是:"bsd", "dvh", "gpt",  "loop","mac", "msdos", "pc98", or "sun" 一般的pc机都是msdos格式,如果分区大于2T则需要选用gpt格式的分区表。

    mkfs partition fs-type  

    在partition分区上创建一个fs-type文件系统,fs-type可以是:"fat16", "fat32", "ext2", "linux-swap","reiserfs" 注意不支持ext3格式的文件系统,只能先分区然后用专有命令进行格式化。

    mkpart part-type [fs-type] start end 

    创建一个part-type类型的分区,part-type可以是:"primary", "logical", or "extended" 如果指定fs-type则在创建分区的同时进行格式化。start和end指的是分区的起始位置,单位默认是M。

    eg:mkpart  primary  0  -1   0表示分区的开始  -1表示分区的结尾  意思是划分整个硬盘空间为主分区

    mkpartfs part-type fs-type start end 

    创建一个fs-type类型的part-type分区,不推荐使用,最好是使用mkpart分区完成后使用mke2fs进行格式化。

    name partition name 

    给分区设置一个名字,这种设置只能用在Mac, PC98, and GPT类型的分区表,设置时名字用引号括起来

    select device 

    在机器上有多个硬盘时,选择操作那个硬盘

    resize partition start end  

    调整分区大小

    rm partition  

    删除一个分区

    rescue start end  

    拯救一个位于stat和end之间的分区

    unit unit 

    在前面分区时,默认分区时数值的单位是M,这个参数卡伊改变默认单位,"kB", "MB",  "GB",  "TB"

    move partition start end 

    移动partition分区

    print  显示分区表信息  quit 退出parted
  • 常用命令
1、Check     简单检查文件系统。建议用其他命令检查文件系统,比如fsck
2、Help      显示帮助信息
3、mklabel   创建分区表, 即是使用msdos(MBR)还是使用gpt,或者是其他方式分区表
4、mkfs      创建文件系统。该命令不支持ext3 格式,因此建议不使用,最好是用parted分好区,然后退出parted交互模式,用其他命令进行分区,比如:mkfs.ext3
5、mkpart    创建新分区。
        格式:mkpart PART-TYPE  [FS-TYPE]  START  END
             PART-TYPE 类型主要有primary(主分区), extended(扩展分区), logical(逻辑区). 扩展分区和逻辑分区只对msdos。
             fs-type   文件系统类型,主要有fs32,NTFS,ext2,ext3等
             start end 分区的起始和结束位置。
6、mkpartfs  建立分区及其文件系统。目前还不支持ext3文件系统,因此不建议使用该功能。最后是分好区后,退出parted,然后用其他命令建立文件系统。
7、print    输出分区信息。该功能有3个选项,
       free 显示该盘的所有信息,并显示磁盘剩余空间
     number 显示指定的分区的信息
        all 显示所有磁盘信息
8、resize   调整指定的分区的大小。目前对ext3格式支持不是很好,所以不建议使用该功能。
9、rescue   恢复不小心删除的分区。如果不小心用parted的rm命令删除了一个分区,那么可以通过rescue功能进行恢复。恢复时需要给出分区的起始和结束的位置。然后parted就会在给定的范围内去寻找,并提示恢复分区。
10、rm      删除分区。命令格式 rm  number 。如:rm 3 就是将编号为3的分区删除
11select  选择设备。当输入parted命令后直接回车进入交互模式是,如果有多块硬盘,需要用select 选择要操作的硬盘。如:select /dev/sdb
12set     设置标记。更改指定分区编号的标志。标志通常有如下几种:boot  hidden   raid   lvm 等。boot 为引导分区,hidden 为隐藏分区,raid 软raid,lvm 为逻辑分区。如:set 3  boot  on   设置分区号3 为启动分区

参考文章:地址

fdisk命令

Linux fdisk是一个创建和维护分区表的程序,它兼容DOS类型的分区表、BSD或者SUN类型的磁盘列表。
fdisk 操作硬盘的命令格式如下:
fdisk 设备

[root@linux7-128 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x06904ac9 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):

主要参数

m :显示菜单和帮助信息
a :活动分区标记/引导分区
d :删除分区
l :显示分区类型
n :新建分区
p :显示分区信息
q :退出不保存
t :设置分区号
v :进行分区检查
w :保存修改
x :扩展应用,高级功能

我们现在对刚才新加的磁盘进行分区
知识点
主分区(包括扩展分区)的总个数不能超过四个
1. 新建分区(n)

命令(输入 m 获取帮助):n   
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 

primary代表主分区,extended代表扩展分区,free代表空余分区。这里可以看到现在没有主分区和扩展分区,只有4个未划分的空余分区,也代表主分区+扩展分区≤4。
首先新建一个主分区

Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB

在新建一个扩展分区

命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
分区号 (2-4,默认 2):2
起始 扇区 (4196352-20971519,默认为 4196352):
将使用默认值 4196352
Last 扇区, +扇区 or +size{K,M,G} (4196352-20971519,默认为 20971519):+1G
分区 2 已设置为 Extended 类型,大小设为 1 GiB

继续新建分区

命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): p
分区号 (3,4,默认 3):
起始 扇区 (6293504-20971519,默认为 6293504):+2G
值超出范围。
起始 扇区 (6293504-20971519,默认为 6293504):
将使用默认值 6293504
Last 扇区, +扇区 or +size{K,M,G} (6293504-20971519,默认为 20971519):+2G
分区 3 已设置为 Linux 类型,大小设为 2 GiB
命令(输入 m 获取帮助):n
Partition type:
   p   primary (2 primary, 1 extended, 1 free)
   l   logical (numbered from 5)
Select (default p): p
已选择分区 4
起始 扇区 (10487808-20971519,默认为 10487808):
将使用默认值 10487808
Last 扇区, +扇区 or +size{K,M,G} (10487808-20971519,默认为 20971519):+4G
分区 4 已设置为 Linux 类型,大小设为 4 GiB

这里注意在新建分区时,会显示已有主分区,扩展分区,空余分区。
当4个分区都创建完成后,继续创建会发生什么呢?


命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (4198400-6293503,默认为 4198400):

会提示我们所有的基本分区都已经被使用了,在创建就是逻辑分区了,加一个试试。

命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (4198400-6293503,默认为 4198400):
将使用默认值 4198400
Last 扇区, +扇区 or +size{K,M,G} (4198400-6293503,默认为 6293503):+1G
值超出范围。
Last 扇区, +扇区 or +size{K,M,G} (4198400-6293503,默认为 6293503):+500M
分区 5 已设置为 Linux 类型,大小设为 500 MiB
  1. 查看分区(p)
命令(输入 m 获取帮助):p

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xd741b1f8

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352     6293503     1048576    5  Extended
/dev/sdb3         6293504    10487807     2097152   83  Linux
/dev/sdb4        10487808    18876415     4194304   83  Linux
/dev/sdb5         4198400     5222399      512000   83  Linux
/dev/sdb6         5224448     6293503      534528   83  Linux

sdb5和sdb6就是我们新增的逻辑分区
3. 删除分区(d)
现在我想删除那两个逻辑分区,我们使用d

命令(输入 m 获取帮助):d
分区号 (1-6,默认 6):5
分区 5 已删除

命令(输入 m 获取帮助):d
分区号 (1-5,默认 5):

注意:分区5删除后,分区6自动会变为分区5。也就是说,删除逻辑分区,分区号不会留空,会自动补上
那么删除主分区和拓展分区呢?

命令(输入 m 获取帮助):d
分区号 (1-4,默认 4):1
分区 1 已删除

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xd741b1f8

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb2         4196352     6293503     1048576    5  Extended
/dev/sdb3         6293504    10487807     2097152   83  Linux
/dev/sdb4        10487808    18876415     4194304   83  Linux

我们看到,当删除主分区时,分区号会留空

知识点

上面看到,现在系统里有一个扩展分区了,还有两个主分区。这时候在新增分区会发生什么呢?


命令(输入 m 获取帮助):n
Partition type:
   p   primary (2 primary, 1 extended, 1 free)
   l   logical (numbered from 5)

这时候在新增分区时,就不能再增加扩展分区,改为可以增加主分区和逻辑分区了。

  1. 保存更改(w)
命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

fdisk -l查看

[root@linux7-128 ~]# fdisk -l

磁盘 /dev/sda:32.2 GB, 32212254720 字节,62914560 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a8d21

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648     8800255     4194304   82  Linux swap / Solaris
/dev/sda3         8800256    62914559    27057152   83  Linux

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xd741b1f8

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352     6293503     1048576    5  Extended
/dev/sdb3         6293504    10487807     2097152   83  Linux
/dev/sdb4        10487808    18876415     4194304   83  Linux

最下面可以看到我们刚才划分的sdb分区

知识点

==关于扩展分区和逻辑分区的关系==
扩展分区虽然我们设置了起始值和结束值,比如设置了5个G,但是真正占有空间的是扩展分区里的逻辑分区。扩展分区本身不支持格式化,不能在里面直接写数据,仅仅是一个壳子,壳子里装的是逻辑分区,真正写数据的也是逻辑分区。

四.磁盘格式化

查看系统支持的文件系统格式
/etc/filesystems

[root@linux7-128 ~]# cat /etc/filesystems 
xfs                 --默认的文件系统
ext4
ext3
ext2
nodev proc
nodev devpts
iso9660
vfat
hfs
hfsplus
*

装系统的时候默认的就是xfs,例如/、/boot的文件系统格式就是xfs
查看文件系统格式 mount
centos6以及以前版本的默认系统文件格式都是ext
==centos6 ext4
centos5 ext3
centos4 ext2==

mke2fs

改变文件系统

参数

-b<区块大小> 指定区块大小,单位为字节。
-c 创建文件系统之前检查设备坏块情况。
-f<不连续区段大小> 指定不连续区段的大小,单位为字节。
-F 不管指定的设备为何,强制执行mke2fs。
-i<字节> 指定"字节/inode"的比例。
-N<inode数> 指定要建立的inode数目。
-l<文件> 从指定的文件中读取设备坏块表信息(bad block table)。
-L<标签> 设置文件系统的标签名称。
-m<百分比值> 指定给管理员保留区块的比例,预设为5%。
-M 记录最后一次挂入的目录。
-q 执行时不显示任何信息。
-E 额外设置参数
-t 指定要创建文件系统类型
-r 指定要建立的ext2文件系统版本。
-R=<区块数> 设置磁盘阵列参数。
-S 仅写入superblock与group descriptors,而不更改inode able inode bitmap以及block bitmap。
-v 执行时显示详细信息。
-V 显示版本信息。

知识点

这里的区块大小就是我们之前所看到的,使用du -shls -lh命令看到的文件大小是不同的,这就是因为区块大小,如果区块大小默认为4K,那么一旦文件写入东西,就算它没有4K,也会占用区块,du -sh查询出来的大小就是4K。如果他没有写入任何数据,那么就不会占用区块,大小都是0.

==空文件==

[root@linux7-128 ~]# du -sh 1.txt 
0   1.txt
[root@linux7-128 ~]# ls -lh 1.txt 
-rw-r--r-- 1 root root 0 519 21:48 1.txt

==写入数据的文件==

[root@linux7-128 ~]# echo 1 > 1.txt 
[root@linux7-128 ~]# du -sh 1.txt 
4.0K    1.txt
[root@linux7-128 ~]# ls -lh 1.txt 
-rw-r--r-- 1 root root 2 519 21:50 1.txt

示例

  1. 将前面创建的/dev/sdb1分区格式更改为xfs
[root@linux7-128 ~]# mke2fs -t xfs /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)

Your mke2fs.conf file does not define the xfs filesystem type.
Aborting...

没有成功,为什么?
使用man mke2fs查看他的用法

  -t fs-type
              Specify  the  filesystem  type (i.e., ext2, ext3, ext4, etc.) that is to be created.  

这里看到mke2fs -t好像是不支持xfs系统的,那怎么办?
可以使用mkfs.ext4,她实际等于mke2fs -t ext4
我们先将/dev/sdb1分区格式更改为ext4

[root@linux7-128 ~]# mke2fs -t 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
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

换成mkfs.ext4试试

[root@linux7-128 ~]# 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
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blo这种cks: 
    32768, 98304, 163840, 229376, 294912

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

依然成功(分区格式化之后可以在格式化一次)
用这种方式来试验将文件系统格式化为xfs格式

[root@linux7-128 ~]# mkfs.xfs /dev/sdb1
mkfs.xfs: /dev/sdb1 appears to contain an existing filesystem (ext4).
mkfs.xfs: Use the -f option to force overwrite.

由于/dev/sdb1已经被格式化过,有了文件系统,所以使用mkfs.xfs的时候需要加一个-f来强制执行格式化,在之前使用mkfs.ext4是不需要的。 `

[root@linux7-128 ~]# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

成功,这时/dev/sdb1的文件系统就变为了xfs。
但是这时候使用mount是看不到/dev/sdb1的,因为他还没有选择挂载点。
==如果想看一个还没有挂载的分区,使用blkid查看==

[root@linux7-128 ~]# blkid /dev/sdb1
/dev/sdb1: UUID="7283a51b-21c6-4bce-b25d-65d91852883e" TYPE="xfs" 

可以看到它的类型为xfs
2. 指定给root用户预留的百分比值 :mke2fs -m
给root用户预留百分之1

[root@linux7-128 ~]# mke2fs -m 1 -t 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
131072 inodes, 524288 blocks
5242 blocks (1.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 
  1. 指定”字节/inode”的比例。:mke2fs -i
    上面的格式化过程可以看到131072 inodes, 524288 blocks,比例为1:4。
    ==1 inode = 4 blocks
    1 blocks = 4096
    1 inode = 16384==
    所以,我们可以让inode和blocks比例小一点
[root@linux7-128 ~]# mke2fs -i 8196 -t 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
262144 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912
hu啊
Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

这时inode和blocks比例为1:2

五.磁盘挂载

没有分区的磁盘也可以格式化,没问题的。
只有格式化的磁盘才能够挂载文件系统,Linux里磁盘要想访问,必须挂载到一个挂载点下,挂载点实际就是一个目录。

mount命令

挂载文件系统
- 语法

mount [-hV]
mount -a [-选项] [-t 文件系统类型] [-O 选项]
mount [-选项] [-o 选项 [,...]] 设备名 | 加载点
mount [-选项] [-t 文件系统类型] [-o 选项] 设备名 加载点
  • 参数
-V:显示程序版本
-h:显示辅助讯息
-v:显示较讯息,通常和 -f 用来除错。
-a:将 /etc/fstab 中定义的所有档案系统挂上。
-F:这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。
-f:通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。
-n:一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。
-s-r:等于 -o ro
-w:等于 -o rw
-L:将含有特定标签的硬盘分割挂上。
-U:将档案分割序号为 的档案系统挂下。-L 和 -U 必须在/proc/partition 这种档案存在时才有意义。
-t:指定档案系统的型态,通常不必指定。mount 会自动选择正确的型态。
-o async:打开非同步模式,所有的档案读写动作都会用非同步模式执行。
-o sync:在同步模式下执行。
-o atime、-o noatime:当 atime 打开时,系统会在每次读取档案时更新档案的『上一次调用时间』。当我们使用 flash 档案系统时可能会选项把这个选项关闭以减少写入的次数。
-o auto、-o noauto:打开/关闭自动挂上模式。
-o defaults:使用预设的选项 rw, suid, dev, exec, auto, nouser, and async.
-o dev、-o nodev 、-o exec、-o noexec允许执行档被执行。
-o suid、-o nosuid:允许执行档在 root 权限下执行。
-o user、-o nouser:使用者可以执行 mount/umount 的动作。
-o remount:将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统,现在用可读写的模式重新挂上。
-o ro:用唯读模式挂上。
-o rw:用可读写模式挂上。
-o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统。
  • 实例
    1. 将新增加的/dev/sdb挂载到/mnt下
首先查看下系统下挂载的磁盘
[root@linux7-128 ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        26G  3.4G   23G   13% /
devtmpfs        483M     0  483M    0% /dev
tmpfs           493M     0  493M    0% /dev/shm
tmpfs           493M  7.1M  486M    2% /run
tmpfs           493M     0  493M    0% /sys/fs/cgroup
/dev/sda1       197M   97M  100M   50% /boot
tmpfs            99M     0   99M    0% /run/user/0
然后将新增加的/dev/sdb挂载到/mnt下
[root@linux7-128 ~]# mount /dev/sdb /mnt/
再查看一遍
[root@linux7-128 ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        26G  3.4G   23G   13% /
devtmpfs        483M     0  483M    0% /dev
tmpfs           493M     0  493M    0% /dev/shm
tmpfs           493M  7.1M  486M    2% /run
tmpfs           493M     0  493M    0% /sys/fs/cgroup
/dev/sda1       197M   97M  100M   50% /boot
tmpfs            99M     0   99M    0% /run/user/0
/dev/sdb         10G   33M   10G    1% /mnt

最下面就会显示出来刚才挂载的/dev/sdb。
在使用mount查看,最下面一行就会出现下列信息
/dev/sdb on /mnt type xfs (rw,relatime,attr2,inode64,noquota)

2. 取消挂载
umount命令

[root@linux7-128 ~]# umount /dev/sdb
[root@linux7-128 ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        26G  3.4G   23G   13% /
devtmpfs        483M     0  483M    0% /dev
tmpfs           493M     0  493M    0% /dev/shm
tmpfs           493M  7.1M  486M    2% /run
tmpfs           493M     0  493M    0% /sys/fs/cgroup
/dev/sda1       197M   97M  100M   50% /boot
tmpfs            99M     0   99M    0% /run/user/0
  1. 在目录下取消挂载
    umount -l命令
假如现在我们的/dev/sdb挂载到了/mnt下,然后我们进入/mnt目录
[root@linux7-128 ~]# cd /mnt
创建一些文件和目录
[root@linux7-128 mnt]# touch 1.txt
[root@linux7-128 mnt]# touch 2.txt
[root@linux7-128 mnt]# mkdir 123
[root@linux7-128 mnt]# ls
123  1.txt  2.txt
在/mnt目录下取消挂载,首先用umount试试
[root@linux7-128 mnt]# umount /dev/sdb
umount: /mnt:目标忙。
        (有些情况下通过 lsof(8) 或 fuser(1) 可以
         找到有关使用该设备的进程的有用信息)
看起来有点问题,那么我们使用umount -l再试试
[root@linux7-128 mnt]# umount -l  /dev/sdb
OK,没有报错,再来看看  
[root@linux7-128 mnt]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        26G  3.4G   23G   13% /
devtmpfs        483M     0  483M    0% /dev
tmpfs           493M     0  493M    0% /dev/shm
tmpfs           493M  7.1M  486M    2% /run
tmpfs           493M     0  493M    0% /sys/fs/cgroup
/dev/sda1       197M   97M  100M   50% /boot
tmpfs            99M     0   99M    0% /run/user/0

/etc/fstab

fstab(/etc/fstab)是Linux下比较重要的配置文件,它包含了系统在启动时挂载文件系统和存储设备的详细信息。
首先查看下我们本机的/etc/fstab文件

[root@linux7-128 ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Sat Apr 28 04:33:21 2018
#
# 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
#
UUID=436c0b2c-ae50-4115-8105-2bee3e4cae4b /                       xfs     defaults        0 0
UUID=8dc50a5a-fd8d-4043-b3a6-71ad4314a83e /boot                   xfs     defaults        0 0
UUID=fdbd2e65-3790-4101-a1f7-c6dd670311dd swap                    swap    defaults        0 0

可以看到这个文件有六列,下面以最后一列为例一一作解释
1. 要挂载的设备或伪文件系统:设备名称,LABEL,UUID,伪文件系统名称。UUID表示设备的ID号,我们在编辑文件时可以直接使用设备名。例如/dev/sdb/,如果要查询UUID可以使用blkid 设备名来查询。
2. 挂载点(扩展为swap)
3. 文件系统类型(auto 寻找默认的),
普通设备挂载:ext#/xfs 等文件系统类型
交换分区 swap:swap
网络挂载地址 linux之间:nfs,windos挂载:cifs
光盘 iso9660,文件 cifs
4. 挂载选项,详细参考man mount. 下面列出一些常用的选项:
auto: 系统自动挂载,fstab默认就是这个选项
ro: read-only
rw: read-write
defaults: rw, suid, dev, exec, auto, nouser, and async.
5. dump选项,设置是否让备份程序dump备份文件系统,
0:不做备份
1:每天转储
2:每隔一天转储
6. fsck选项,告诉fsck程序以什么顺序检查文件系统。(如果开机系统自检不过,就无法正常开机)
0:不自检
1:最先自检,一般为/ 2…:数越小优先级最大
==如果设备不小心被破坏,开机自检不过,无法正常启用,该怎么办?==
只需要修复一下文件系统就好了,(如果不能修复,可以去/etc/fstab中把自检改为0)
参考博客:地址

六.手动增加swap空间

查看swap空间

[root@linux7-128 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            984         177         598           7         208         627
Swap:          4095           0        4095

查看swap信息,包括文件和分区的详细信息
swapon -s 或者cat /proc/swaps

[root@linux7-128 ~]# swapon -s
文件名             类型      大小  已用  权限
/dev/sda2           partition   4194300  0      -1
[root@linux7-128 ~]# cat /proc/swaps
Filename                Type        Size    Used    Priority
/dev/sda2               partition   4194300 0           -1

增加swap交换文件

  1. 使用dd命令创建一个swap交换文件
[root@linux7-128 ~]# dd if=/dev/zero of=/tmp/newswap bs=1M count=100
记录了100+0 的读入
记录了100+0 的写出
104857600字节(105 MB)已复制,1.6127 秒,65.0 MB/秒

这样就建立一个/tmp/newswap的分区文件,大小为100M。
2. 制作为swap格式文件

[root@linux7-128 ~]# mkswap /tmp/newswap 
正在设置交换空间版本 1,大小 = 102396 KiB
无标签,UUID=2d7cd591-a743-49bd-a3f6-e2b714d72150
  1. 再用swapon命令把这个文件分区挂载swap分区
[root@linux7-128 ~]# swapon /tmp/newswap
swapon: /tmp/newswap:不安全的权限 0644,建议使用 0600。
[root@linux7-128 ~]# chmod 0600 !$
chmod 0600 /tmp/newswap
  1. 用free -m命令看一下,发现有没有交换分区了
[root@linux7-128 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            984         177         494           7         311         625
Swap:          4195           0        4195

发现比之前多了100M的空间。

dd命令

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
注意:
指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2
- 参数

1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
3. ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
    obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
    bs=bytes:同时设置读入/输出的块大小为bytes个字节。
4. cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
5. skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
6. seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
7. count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
8. conv=conversion:用指定的参数转换文件。
    ascii:转换ebcdic为ascii
     ebcdic:转换ascii为ebcdic
    ibm:转换ascii为alternate ebcdic
    block:把每一行转换为长度为cbs,不足部分用空格填充
    unblock:使每一行的长度都为cbs,不足部分用空格填充
    lcase:把大写字符转换为小写字符
    ucase:把小写字符转换为大写字符
    swab:交换输入的每对字节
     noerror:出错时不停止
     notrunc:不截短输出文件
    sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
  • 实例
1.将本地的/dev/hdb整盘备份到/dev/hdd
#dd if=/dev/hdb of=/dev/hdd
2.将/dev/hdb全盘数据备份到指定路径的image文件
#dd if=/dev/hdb of=/root/image
3.将备份文件恢复到指定盘
#dd if=/root/image of=/dev/hdb
4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
#dd if=/dev/hdb | gzip > /root/image.gz
5.将压缩的备份文件恢复到指定盘
#gzip -dc /root/image.gz | dd of=/dev/hdb
6.备份与恢复MBR
备份磁盘开始的512个字节大小的MBR信息到指定文件:
#dd if=/dev/hda of=/root/image count=1 bs=512
   count=1指仅拷贝一个块;bs=512指块大小为512个字节。
恢复:
#dd if=/root/image of=/dev/had
将备份的MBR信息写到磁盘开始部分
7.备份软盘
#dd if=/dev/fd0 of=disk.img count=1 bs=1440k (即块大小为1.44M)
8.拷贝内存内容到硬盘
#dd if=/dev/mem of=/root/mem.bin bs=1024 (指定块大小为1k)  
9.拷贝光盘内容到指定文件夹,并保存为cd.iso文件
#dd if=/dev/cdrom(hdc) of=/root/cd.iso
11.销毁磁盘数据
#dd if=/dev/urandom of=/dev/hda1
注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。
12.测试硬盘的读写速度
#dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
#dd if=/root/1Gb.file bs=64k | dd of=/dev/null
通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。
13.确定硬盘的最佳块大小:
#dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
#dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
#dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
#dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。
14.修复硬盘:
#dd if=/dev/sda of=/dev/sda 或dd if=/dev/hda of=/dev/hda
当硬盘较长时间(一年以上)放置不使用后,磁盘上会产生magnetic flux point,当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。并且这个过程是安全、高效的。
15.利用netcat远程备份
#dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234
在源主机上执行此命令备份/dev/hda
#netcat -l -p 1234 | dd of=/dev/hdc bs=16065b
在目的主机上执行此命令来接收数据并写入/dev/hdc
#netcat -l -p 1234 | bzip2 > partition.img
#netcat -l -p 1234 | gzip > partition.img
以上两条指令是目的主机指令的变化分别采用bzip2、gzip对数据进行压缩,并将备份文件保存在当前目录。
将一个很大的视频文件中的第i个字节的值改成0x41(也就是大写字母A的ASCII值)
echo A | dd of=bigfile seek=$i bs=1 count=1 conv=notrunc

删除swap交换文件

  1. 先停止swap分区
[root@linux7-128 ~]# swapoff /tmp/newswap 
  1. 删除swap分区文件
[root@linux7-128 ~]# rm -rf /tmp/newswap

参考博客:地址

七.LVM详解

概述

LVM全称是Logical Volume Manager,即逻辑卷管理器。它是Linux环境下对磁盘分区进行管理的一种机制;它可以将多个物理分区整合在一起,并且可以根据实际需要动态调整文件系统空间。另外,它还可以提供快照,快照在刚创建的时候,其内容是和原卷一模一样的,只有数据在原卷中发生变化的时候,快照会将被改动数据的原数据保存起来。

相关概念

1.物理卷(Physical Volume)

物理卷是组成LVM的最底层的元素,即Linux上的物理分区。

2.卷组(Volume Group)

将各个独立的PV组合起来形成的一个存储空间就称为VG,VG的大小就是整个LVM的大小。

3.逻辑卷(Logical Volume)

可以被用户格式化、挂载并提供数据存储的对象就是LV。

4.物理扩展块(Physical Extent)

PE相当于Linux分区中的block,它是LVM的最小存储单位,默认为4M。   

image

基本操作

准备磁盘分区

fdisk /dev/sdb

n 创建3个新分区,分别1G

t 改变分区类型为8e

创建分区前面已经介绍过了,此处不多说明,需要注意的是如何更改分区类型。
图片上已经说过使用t来修改,我们实际操作一下。

命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):1
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux LVM”的类型更改为“Linux LVM”

按此方法将刚才创建的3个分区分区类型都变为8e,也就是Linux LVM。

准备物理卷

pvcreate /dev/sdb1

pvcreate /dev/sdb2

pvcreate /dev/sdb3

pvdisplay 列出当前物理卷

pvremove /dev/sdb3 删除物理卷

知识点1
如何安装想要的软件包,但是忘记了包名?
根据命令去上搜索 yum provides "/*/pvcreate
用这种通配符的方式去安装含有此命令的包。
知识点2
如果分完区后没有自动生成/dev/sdb这个文件,可以使用partprobe命令来生成一下。

创建物理卷

[root@linux7-128 ~]#  pvcreate /dev/sdb1
WARNING: ext4 signature detected on /dev/sdb1 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/sdb1.
  Physical volume "/dev/sdb1" successfully created.
[root@linux7-128 ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.
[root@linux7-128 ~]# pvcreate /dev/sdb3
WARNING: dos signature detected on /dev/sdb3 at offset 510. Wipe it? [y/n]: y
  Wiping dos signature on /dev/sdb3.
  Physical volume "/dev/sdb3" successfully created.

列出当前物理卷

[root@linux7-128 ~]# pvdisplay
  "/dev/sdb1" is a new physical volume of "1.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               1.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               Dd1J10-tqOb-Vxns-2dlF-aQeN-Uee0-ZeLNmW

  "/dev/sdb2" is a new physical volume of "1.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               1.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               x2pFZf-YN4t-bLG4-9PuM-q3mX-WoVm-GZOk3S

  "/dev/sdb3" is a new physical volume of "1.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb3
  VG Name               
  PV Size               1.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               pmaLZS-1uW2-C83I-boGO-8M2j-UL2c-4wcrVc

更直观的显示方式pvs

[root@linux7-128 ~]# pvs
  PV         VG Fmt  Attr PSize PFree
  /dev/sdb1     lvm2 ---  1.00g 1.00g
  /dev/sdb2     lvm2 ---  1.00g 1.00g
  /dev/sdb3     lvm2 ---  1.00g 1.00g

创建卷组
vgcreate VG_NAME PV_NAME

[root@linux7-128 ~]# vgcreate vg1 /dev/sdb1 /dev/sdb2
  Volume group "vg1" successfully created

查看卷组详细信息
(1)vgs:简要查看VG信息。

(2)vgdisplay:详细查看VG信息。

 A.vgdisplay: 直接使用该命令,查看所有VG的信息。    

B.vgdisplay VG_NAME: 表示查看这个VG的信息。
[root@linux7-128 ~]# vgdisplay 
  --- Volume group ---
  VG Name               vg1
  System ID             
  Format                lvm2
  Metadata Areas        2
  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                2
  Act PV                2
  VG Size               1.99 GiB
  PE Size               4.00 MiB
  Total PE              510
  Alloc PE / Size       0 / 0   
  Free  PE / Size       510 / 1.99 GiB
  VG UUID               l4ZAUg-aZs8-1NcW-aVvk-bMFI-3cD9-YPgWrM
[root@linux7-128 ~]# vgs
  VG  #PV #LV #SN Attr   VSize VFree
  vg1   2   0   0 wz--n- 1.99g 1.99g

创建逻辑卷
命令: lvcreate -L SIZE -n LV_NAME VG_NAME

[root@linux7-128 ~]# lvcreate -L 100M -n lv1 vg1
  Logical volume "lv1" created.

查看逻辑卷
命令:
(1)lvs: 简要查看LV信息

(2)lvdisplay 逻辑卷的设备文件名称: 详细查看LV信息

 逻辑卷的设备文件名称路径:/dev/VG_NAME/LV_NAME 或者 /dev/mapper/VG_NAME-LV_NAME    
[root@linux7-128 ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vg1/lv1
  LV Name                lv1
  VG Name                vg1
  LV UUID                yzryv3-QyvD-oPeB-EZhy-awOh-q2OH-K7qD9X
  LV Write Access        read/write
  LV Creation host, time linux7-128, 2018-05-20 23:10:05 +0800
  LV Status              available
  # open                 0
  LV Size                100.00 MiB
  Current LE             25
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

[root@linux7-128 ~]# lvs
  LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg1 -wi-a----- 100.00m                 

格式化为ext4文件格式

[root@linux7-128 ~]# mkfs.ext4 /dev/vg1/lv1 
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33685504
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks: 
    8193, 24577, 40961, 57345, 73729

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

挂载到/mnt

[root@linux7-128 ~]# mount /dev/vg1/lv1 /mnt/
[root@linux7-128 ~]# df -h
文件系统             容量  已用  可用 已用% 挂载点
/dev/sda3             26G  3.4G   23G   13% /
devtmpfs             483M     0  483M    0% /dev
tmpfs                493M     0  493M    0% /dev/shm
tmpfs                493M  7.1M  486M    2% /run
tmpfs                493M     0  493M    0% /sys/fs/cgroup
/dev/sda1            197M   97M  100M   50% /boot
tmpfs                 99M     0   99M    0% /run/user/0
/dev/mapper/vg1-lv1   93M  1.6M   85M    2% /mnt

这时候我们发现挂载后的文件系统变为了/dev/mapper/vg1-lv1,这个和/dev/vg1/lv1有什么关联呢?

[root@linux7-128 ~]# ls -l /dev/vg1/lv1 
lrwxrwxrwx 1 root root 7 520 23:14 /dev/vg1/lv1 -> ../dm-0
[root@linux7-128 ~]# ls -l /dev/mapper/vg1-lv1 
lrwxrwxrwx 1 root root 7 520 23:14 /dev/mapper/vg1-lv1 -> ../dm-0

实际上他们指向的是同一个位置

扩展逻辑卷

  • lvresize -L 300M /dev/vg1/lv1 重新设置卷大小
  • e2fsck -f /dev/vg1/lv1 检查磁盘错误(ext4执行)
  • resize2fs /dev/vg1/lv1 更新逻辑卷信息(ext4执行)
  • xfs_growfs /dev/vg1/lv1 xfs文件系统需要执行
[root@linux7-128 ~]# umount /mnt/
[root@linux7-128 ~]# lvresize -L 300M /dev/vg1/lv1
  New size (75 extents) matches existing size (75 extents).
[root@linux7-128 ~]# e2fsck -f /dev/vg1/lv1
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/vg1/lv1: 14/25688 files (7.1% non-contiguous), 8897/102400 blocks
[root@linux7-128 ~]# resize2fs /dev/vg1/lv1
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg1/lv1 to 307200 (1k) blocks.
The filesystem on /dev/vg1/lv1 is now 307200 blocks long.
[root@linux7-128 ~]# !mount
mount /dev/vg1/lv1 /mnt/
[root@linux7-128 ~]# df -h /mnt/
文件系统             容量  已用  可用 已用% 挂载点
/dev/mapper/vg1-lv1  287M  2.0M  266M    1% /mnt

这期间/mnt里创建的文件和目录都依然存在。

缩减逻辑卷(xfs不支持)

  • 先umount
  • e2fsck -f /dev/vg1/lv1 检查磁盘错误(ext)
  • resize2fs /dev/vg1/lv1 100M 更新逻辑卷信息(ext)
  • lvresize -L 100M /dev/vg1/lv1 重新设置卷大小
[root@linux7-128 ~]# umount /mnt/
[root@linux7-128 ~]# e2fsck -f /dev/vg1/lv1
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/vg1/lv1: 14/75088 files (7.1% non-contiguous), 15638/307200 blocks
[root@linux7-128 ~]# resize2fs /dev/vg1/lv1 100M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg1/lv1 to 102400 (1k) blocks.
The filesystem on /dev/vg1/lv1 is now 102400 blocks long.

[root@linux7-128 ~]# lvresize -L 100M /dev/vg1/lv1
  WARNING: Reducing active logical volume to 100.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/lv1? [y/n]: y
  Size of logical volume vg1/lv1 changed from 300.00 MiB (75 extents) to 100.00 MiB (25 extents).
  Logical volume vg1/lv1 successfully resized.
[root@linux7-128 ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vg1/lv1
  LV Name                lv1
  VG Name                vg1
  LV UUID                yzryv3-QyvD-oPeB-EZhy-awOh-q2OH-K7qD9X
  LV Write Access        read/write
  LV Creation host, time linux7-128, 2018-05-20 23:10:05 +0800
  LV Status              available
  # open                 0
  LV Size                100.00 MiB
  Current LE             25
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

[root@linux7-128 ~]# mount /dev/vg1/lv1  /mnt/
[root@linux7-128 ~]# df -h /mnt/
文件系统             容量  已用  可用 已用% 挂载点
/dev/mapper/vg1-lv1   93M  1.6M   85M    2% /mnt

xfs扩容

将文件系统格式化为xfs

[root@linux7-128 ~]# !umount
umount /mnt/
[root@linux7-128 ~]# mkfs.xfs -f /dev/vg1/lv1 
meta-data=/dev/vg1/lv1           isize=512    agcount=4, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=25600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

在/mnt/下新建一个文件,并且加几条数据。

[root@linux7-128 ~]# cd /mnt/
[root@linux7-128 mnt]# touch 1.txt
[root@linux7-128 mnt]# echo '1111111111111' > 1.txt 
[root@linux7-128 mnt]# cat 1.txt 
1111111111111

开始扩容

[root@linux7-128 ~]# lvs
  LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg1 -wi-a----- 100.00m                                                    
[root@linux7-128 ~]# lvresize -L 300M /dev/vg1/lv1
  Size of logical volume vg1/lv1 changed from 100.00 MiB (25 extents) to 300.00 MiB (75 extents).
  Logical volume vg1/lv1 successfully resized.
[root@linux7-128 ~]# lvs
  LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg1 -wi-a----- 300.00m    
[root@linux7-128 ~]# !mount
mount /dev/vg1/lv1  /mnt/
[root@linux7-128 ~]# df -h
文件系统             容量  已用  可用 已用% 挂载点
/dev/sda3             26G  3.4G   23G   13% /
devtmpfs             483M     0  483M    0% /dev
tmpfs                493M     0  493M    0% /dev/shm
tmpfs                493M  7.1M  486M    2% /run
tmpfs                493M     0  493M    0% /sys/fs/cgroup
/dev/sda1            197M   97M  100M   50% /boot
tmpfs                 99M     0   99M    0% /run/user/0
/dev/mapper/vg1-lv1   97M  5.2M   92M    6% /mnt
[root@linux7-128 ~]# xfs_growfs /dev/vg1/lv1
meta-data=/dev/mapper/vg1-lv1    isize=512    agcount=4, agsize=6400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=25600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 25600 to 76800
[root@linux7-128 ~]# lvs
  LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg1 -wi-ao---- 300.00m                                                    
[root@linux7-128 ~]# df -h /mnt/
文件系统             容量  已用  可用 已用% 挂载点
/dev/mapper/vg1-lv1  297M  5.5M  292M    2% /mnt

扩展后/mnt下的文件不存在了
知识点
==如何扩展卷组==
- fdisk /dev/sdb 新增/dev/sdb5(逻辑分区8e) 2G
- pvcreate /dev/sdb5
- vgectend vg1 /dev/sdb5
- lvresize -L 100M /dev/vg1/lv1 重新设置卷大小

参考博客: 地址

八.RAID

含义原理

什么是RAID?

硬盘是个很脆弱的东西,它经常会坏掉。所以,为了保证服务器可靠耐用,硬盘必须时时刻刻保持可用。所以有了RAID这个东西。它的目的是将好几个硬盘合并在一起,就算硬盘坏了一个,剩下还有好几个硬盘是正常的,这样服务器才不会挂掉。

当然,保证服务高可用只是RAID其中的一个功能。它还能提升储存容量、加快存取速度等能力。

RAID分为0~6级,另外还有RAID 1+0,简称RAID 10。
原理

RAID=硬盘1+硬盘2+硬盘3+硬盘4+硬盘5+硬盘6+…..+硬盘n

RAID-0

RAID 0没有数据冗余、没有奇偶校验。因此,如果一个硬盘坏掉了,整个RAID阵列的数据都没法正常使用了。它存在的意义在于加快读写速度,提升硬盘容量。通常在数据可靠性要求不高的情况下才会使用RAID 0。比如游戏、科学计算。

因为每个硬盘都可以独立读写,如果硬盘有n块,那么读写速度提升是n倍。

下图是RAID 0的数据分布方式:
image

RAID-1

RAID 1模式下,如果有n块硬盘,那么会把数据保存n份一模一样的。这样即使一份数据坏掉了,剩下的备份可以正常工作。性能方面,随机存取速度相当于所有硬盘的总和,写入性能和原来单个硬盘的性能一样。
image

RAID-1E

这种模式跟RAID 1的区别在于,当硬盘数量大于2时,RAID 1E对于同一份数据最多保存两份一模一样的。这样可以充分的利用硬盘空间。下图说明了这种储存方式。
image

RAID-1+0

这种模式全称是RAID-1加上RAID-0。它实现的原理如下图所示:

用几句话来描述吧。它相当于先把这些硬盘成对成对的用RAID-1方式组合起来,然后再把这些组合结果用RAID-0方式组合起来。这种模式下它支持高可用,又能有很好的读写性能。这种方式,由于需要存两份一模一样的数据,因此容量会损失一半。

这种方式是目前最常用的。
image

RAID-2

这种模式现在已经不太常用了。它把每个数据位都打散,然后均匀的放到各个硬盘上。使用了Hamming代码来做纠错,将Hamming代码放到专门的几个硬盘里面。下图可以看到这种模式的数据分布:
image

RAID-3

这种模式现在也已经不太常用了。它把每个数据字节都打散,然后均匀的分散到各个硬盘。然后将奇偶校验的数据放到专门的硬盘里。关于奇偶校验的数据在后面会提到。这种模式下,由于每个数据都分散到各个硬盘的不同地方,因此每次操作都需要所有硬盘来参与。所以,对于随机存取的场景下,这种模式的性能是很差的。对于特别长的顺序读写是非常合适的,比如视频监控数据。
image

RAID-4

这种模式把每个数据块打散,然后均匀的分散到各个硬盘。另外还设置了专门的硬盘用来储存奇偶校验的数据。这种模式下,随机读取的性能非常好。但是随机写入的性能却不行。因为需要将所有奇偶校验的数据全部写到专门的硬盘里面。
image

RAID-5

这种模式把每个数据块打散,然后均匀分布到各个硬盘。与RAID-4不同的是,它将奇偶校验的数据均匀的分散到不同的硬盘。这样如果有一个硬盘坏掉了,丢失的数据可以从奇偶校验里面计算出来。

通常RAID-5的容量会损失1/3,用来储存奇偶校验信息。

这种模式兼顾了成本、性能,也是比较常用的一种模式。
image

RAID-6

这种模式与其他模式的区别在于,它支持两块硬盘同时损坏,并且仍然能够正常工作。它有这般神奇的能力,是因为它保存了两种奇偶校验。一种是普通的XOR方式,跟RAID-5一样。另外一种比较复杂,需要消耗比较多的CPU。这种奇偶校验方式在后面再讲。
image

==参考文章==:
https://blog.csdn.net/caipeichao2/article/details/52661825
https://help.aliyun.com/document_detail/25452.html
https://blog.csdn.net/xtdhqdhq/article/details/17581483
https://www.2cto.com/os/201204/126370.html
http://forum.huawei.com/enterprise/zh/thread-274145-1-1.html
https://blog.csdn.net/JesseYoung/article/details/38367217
http://note.youdao.com/groupshare/?token=4B93E8BA2C634591BCEF4A6F94A3819C&gid=28142651

猜你喜欢

转载自blog.csdn.net/u013946328/article/details/80411655