Linux学习之路-Linux-磁盘管理【5】---20171210

设备文件

I/O Ports: I/O设备地址
一切皆文件:

open(), read(), write(), close()

设备类型:

块设备:block,存取单位“块”,磁盘
字符设备:char,存取单位“字符”,键盘

设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
设备号码:

主设备号:major number, 标识设备类型
次设备号:minor number, 标识同一类型下的不同设备
[root@Centos6app]#ll /dev/sda<br/>brw-rw----. 1 root disk 8, 0 12月 1 01:22 /dev/sda ---->8,0 8是主要编号(大的类别),0是次要编号(是这个类别下的第几个设备)

  • 磁盘设备的设备文件命名:

    /dev/DEV_FILE

  • SCSI, SATA, SAS, IDE,USB:

    /dev/sd

  • 虚拟磁盘:

    /dev/vd

  • 不同磁盘标识:

    a-z,aa,ab… /dev/sda, /dev/sdb, ...

  • 同一设备上的不同分区:

    1,2, ... /dev/sda1, /dev/sda5

  • 硬盘存储术语

    head:磁头
    track:磁道
    cylinder: 柱面
    sector: 扇区,512bytes
    磁盘单面一圈默认为0-63个扇区
    磁盘单面默认有0-1023个磁道
    数据越靠外圈读写速度更快

  • CHS和LBA

CHS

采用24bit位寻址
其中前10位表示cylinder,中间8位表示head,后面6位表示sector。
最大寻址空间8GB

LBA(logical block addressing)

LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址
LBA采用48个bit位寻址
最大寻址空间128PB

由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式

  • 为什么分区

优化I/O性能
实现磁盘空间配额限制
提高修复速度
隔离系统和程序
安装多个OS
采用不同文件系统

  • 如果硬盘不划分分区,磁盘没有文件系统,只能用二进制进行访问。
  • 特定情况使用这种方法,这种叫做“裸设备”,性能更高,但极少采用。

图形界面查看硬盘情况

[root@Centos7~]#gnome-disks

Linux学习之路-Linux-磁盘管理【5】---20171210

分区种类

两种分区方式:MBR和GPT
MBR: Master Boot Record,1982年,使用32位表示扇区数
单个分区不能超过2T容量
如何分区:按柱面
0磁道0扇区(存储分区信息):共计512bytes (被破坏后,基本报废)

446bytes: boot loader (存放关于计算机启动的相关信息,如果不是引导磁盘,此446字节为空)
64bytes:分区表
16bytes: 标识一个分区
2bytes: 55AA (16进制数)

4个主分区;3主分区+1扩展(N个逻辑分区)
引导磁盘必须有一个主分区,用来引导系统
如果磁盘不适用于引导系统,可以没有主分区
扩展分区不能直接存储数据,必须建立逻辑分区进行存储数据

MBR分区结构

Linux学习之路-Linux-磁盘管理【5】---20171210

增加硬盘后,不用重新启动系统,输入下列命令进行启动新加的硬盘
[root@Centos6~]#echo '- - -' >/sys/class/scsi_host/host2/scan 
  • sda硬盘前512字节内容
    [root@Centos6~]#hexdump /dev/sda -C -n 512
    00000000  eb 48 90 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |.H..............|
    00000010  fb  be 00 7c bf  00 06 b9  00 02 f3  a4 ea 21 06 00  |...|.........!..|
    00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
    00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 03 02  |.........|...t..|
    00000040  80 00 00 80 a8 43 04 00  00 08 fa 90 90 f6 c2 80  |.....C..........|
    00000050  75 02 b2 80 ea 59 7c 00  00 31 c0 8e d8 8e d0 bc  |u....Y|..1......|
    00000060  00 20 fb a0 40 7c 3c ff  74 02 88 c2 52 f6 c2 80  |. ..@|<.t...R...|
    00000070  74 54 b4 41 bb aa 55 cd  13 5a 52 72 49 81 fb 55  |tT.A..U..ZRrI..U|
    00000080  aa 75 43 a0 41 7c 84 c0  75 05 83 e1 01 74 37 66  |.uC.A|..u....t7f|
    00000090  8b 4c 10 be 05 7c c6 44  ff 01 66 8b 1e 44 7c c7  |.L...|.D..f..D|.|
    000000a0  04 10 00 c7 44 02 01 00  66 89 5c 08 c7 44 06 00  |....D...f.\..D..|
    000000b0  70 66 31 c0 89 44 04 66  89 44 0c b4 42 cd 13 72  |pf1..D.f.D..B..r|
    000000c0  05 bb 00 70 eb 7d b4 08  cd 13 73 0a f6 c2 80 0f  |...p.}....s.....|
    000000d0  84 f0 00 e9 8d 00 be 05  7c c6 44 ff 00 66 31 c0  |........|.D..f1.|
    000000e0  88 f0 40 66 89 44 04 31  d2 88 ca c1 e2 02 88 e8  |..@f.D.1........|
    000000f0  88 f4 40 89 44 08 31 c0  88 d0 c0 e8 02 66 89 04  |..@.D.1......f..|
    00000100  66 a1 44 7c 66 31 d2 66  f7 34 88 54 0a 66 31 d2  |f.D|f1.f.4.T.f1.|
    00000110  66 f7 74 04 88 54 0b 89  44 0c 3b 44 08 7d 3c 8a  |f.t..T..D.;D.}<.|
    00000120  54 0d c0 e2 06 8a 4c 0a  fe c1 08 d1 8a 6c 0c 5a  |T.....L......l.Z|
    00000130  8a 74 0b bb 00 70 8e c3  31 db b8 01 02 cd 13 72  |.t...p..1......r|
    00000140  2a 8c c3 8e 06 48 7c 60  1e b9 00 01 8e db 31 f6  |*....H|`......1.|
    00000150  31 ff fc f3 a5 1f 61 ff  26 42 7c be 7f 7d e8 40  |1.....a.&B|..}.@|
    00000160  00 eb 0e be 84 7d e8 38  00 eb 06 be 8e 7d e8 30  |.....}.8.....}.0|
    00000170  00 be 93 7d e8 2a 00 eb  fe 47 52 55 42 20 00 47  |...}.*...GRUB .G|
    00000180  65 6f 6d 00 48 61 72 64  20 44 69 73 6b 00 52 65  |eom.Hard Disk.Re|
    00000190  61 64 00 20 45 72 72 6f  72 00 bb 01 00 b4 0e cd  |ad. Error.......|
    000001a0  10 ac 3c 00 75 f4 c3 00  00 00 00 00 00 00 00 00  |..<.u...........|
    000001b0  00 00 00 00 00 00 00 00  dc 63 01 00 00 00 80 20  |.........c..... |
    000001c0  21 00 83 1b 02 99 00 08  00 00 00 80 25 00 00 1b  |!...........%...|
    000001d0  03 99 83 fe ff ff 00 88  25 00 00 00 59 06 00 fe  |........%...Y...|
    000001e0  ff ff 83 fe ff ff 00 88  7e 06 00 80 af 02 00 fe  |........~.......|
    000001f0  ff ff 05 fe ff ff 00 08  2e 09 00 f8 d1 0f 55 aa  |..............U.|
    00000200
  • 备份磁盘0号扇区(备份后的文件必须放到其他硬盘或者其他机器上)
[root@Centos6~]#dd if=/dev/sda of=/app/mbr bs=1 count=512
记录了512+0 的读入
记录了512+0 的写出
512字节(512 B)已复制,0.00214059 秒,239 kB/秒
[root@Centos6~]#ll /app/mbr 
-rw-r--r--. 1 root root 512 12月  2 18:29 /app/mbr
  • 破坏磁盘0号扇区分区表的64个字节
dd if=/dev/zero of=/dev/sda bs=1 count=64 skip=446 seek=446
后果就是系统无法启动,因为分区表被破坏,找不到磁盘中的数据。
救援模式下,从其他系统考取备份的0号扇区文件,进行修复sda硬盘
dd if=mbr of=/dev/sda bs=1 count=64 skip=446 seek=446
  • 用已有分区的硬盘分区表去覆盖没有分区的硬盘,需要复制后66位字节
  • 没有最后的55aa,新硬盘分区表不会生效。
  • 而且没办法复制逻辑分区(不要这么玩,不好玩的)
[root@Centos6~]#dd if=/app/mbr of=/dev/sdb bs=1 count=66 skip=446 seek=446

硬盘主引导记录MBR由4个部分组成

主引导程序(偏移地址0000H--0088H):它负责从活动分区中装载,并运行系统引导程序。
出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。
分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4
结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA

Linux学习之路-Linux-磁盘管理【5】---20171210
Linux学习之路-Linux-磁盘管理【5】---20171210

  • GPT分区

没有扩展分区和逻辑分区,全部都是主分区
突破分区上限为2T的限制
GPT:GUID(Globals Unique Identifiers)partition table(全局唯一标识符分区表), 支持128个分区,使用64位,支持8Z( 512Byte/block )64Z ( 4096Byte/block)
使用128位UUID(Universally Unique Identifier) :通用唯一标识符(也可以叫做全局唯一标识符), 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位

[root@Centos6~]#uuidgen
e996a486-f7c9-4962-bc35-f77ce010972a (16进制数,转换成2进制就为128位)

UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动

  • EFI部分又可以分为4个区域:

    EFI信息区(GPT头)
    分区表
    GPT分区
    备份区域
    见下图:
    Linux学习之路-Linux-磁盘管理【5】---20171210
    LBA0:保护性MBR
    LBA1:主GUID分区头部
    LBA2-LBA33:分区表
    后续就是各分区及分区表等信息备份
    Linux学习之路-Linux-磁盘管理【5】---20171210

BIOS+MBR与UEFI+GPT

传统BIOS运行流程

开机--->BIOS初始化--->BIOS自检--->引导操作系统--->进入系统

UEFI运行流程

开机--->UEFI初始化--->引导操作系统--->进入系统
Linux学习之路-Linux-磁盘管理【5】---20171210

  • 查看分区信息的几种方式
    [root@Centos6~]#ls /dev/sd*                 ------->来自内存信息
    /dev/sda   /dev/sda2  /dev/sda4  /dev/sdb
    /dev/sda1  /dev/sda3  /dev/sda5  /dev/sdc
    [root@Centos6~]#cat /proc/partitions                 ------->来自内存信息
    major minor  #blocks  name
    8        0  209715200 sda
    8        1    1228800 sda1
    8        2   53248000 sda2
    8        3   22528000 sda3
    8        4          1 sda4
    8        5    2097152 sda5
    8       16  104857600 sdb
    8       32   83886080 sdc
    [root@Centos6~]#lsblk                        ------->来自内存信息
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0     11:0    1  3.7G  0 rom  /media/CentOS_6.9_Final
    sda      8:0    0  200G  0 disk 
    ├─sda1   8:1    0  1.2G  0 part /boot
    ├─sda2   8:2    0 50.8G  0 part /
    ├─sda3   8:3    0 21.5G  0 part /app
    ├─sda4   8:4    0    1K  0 part 
    └─sda5   8:5    0    2G  0 part [SWAP]
    sdb      8:16   0  100G  0 disk 
    sdc      8:32   0   80G  0 disk 
    [root@Centos6~]#fdisk -l                         ------->来自硬盘信息
    Disk /dev/sda: 214.7 GB, 214748364800 bytes
    255 heads, 63 sectors/track, 26108 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000163dc
    Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *           1         154     1228800   83  Linux
    Partition 1 does not end on cylinder boundary.
    /dev/sda2             154        6783    53248000   83  Linux
    /dev/sda3            6783        9587    22528000   83  Linux
    /dev/sda4            9587       26109   132709376    5  Extended
    /dev/sda5            9588        9849     2097152   82  Linux swap / Solaris
    Disk /dev/sdb: 107.4 GB, 107374182400 bytes
    255 heads, 63 sectors/track, 13054 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x00000000
    Disk /dev/sdc: 85.9 GB, 85899345920 bytes
    255 heads, 63 sectors/track, 10443 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x00000000

    管理分区命令

    列出块设备命令 :lsblk

  • 创建分区使用:
    1. fdisk 命令

      创建MBR分区
      fdisk [-uc] [-b sectorsize] [-C cyls] [-H heads] [-S sects] device
      fdisk不擅长管理GUID分区表(GPT),它不适用于大型分区。特别情况使用更高级的GNU parted命令。
      常用选项

      -b扇区化
             -h打印帮助,然后退出。
             -c关闭DOS兼容模式。 (推荐的)
             -C cyl 指定磁盘的柱面数
             -H 指定磁盘的磁头数量(当然不是物理编号,而是分区表使用的编号。)合理的值是255和16。
             -S 指定磁盘每个磁道的扇区数。 (当然不是物理编号,而是用于分区表的编号)。合理的值是63。
             -l列出指定设备的分区表,然后退出。如果没有给出设备,则使用/ proc /分区(如果存在)中提到的设备。
             -u列出分区表时,请在扇区中给出大小而不是圆柱体。
             -s分区分区大小(以块为单位)打印在标准输出上。
             -v打印fdisk程序的版本号并退出。

  1. gdisk 创建GPT分区

    gdisk - Interactive GUID partition table (GPT) manipulator(交互式GUID分区表(GPT)操纵器)
    gdisk [ -l ] device
    交互模式选项(普通)

    b:将GPT数据备份到文件
    c:更改分区的名称
    d:删除一个分区
    i:显示分区的详细信息
    l:列出已知的分区类型
    n:添加一个新的分区
    o:创建一个新的空的GUID分区表(GPT)
    p:打印分区表
    q:退出而不保存更改
    r:恢复和转换选项(仅限专家)
    s:排序分区
    t:更改分区的类型代码
    v:验证磁盘
    w:写表到磁盘并退出
    x:额外功能(仅限专家)
    ?:打印这个菜单

    专家模式选项:

    a:设置属性
    c:更改分区GUID
    d:显示扇区对齐值
    e:将备份数据结构重新定位到磁盘的末尾
    g:更改磁盘GUID
    h:重新计算保护性/杂种MBR中的CHS值
    i :显示分区的详细信息
    l :设置扇区对齐值
    m:返回主菜单
    n:创建一个新的保护性MBR
    o:打印保护性MBR数据
    p:打印分区表
    q:退出而不保存更改
    r:恢复和转换选项(仅限专家)
    s:调整分区表
    t:转置两个分区表条目
    u:在新设备上复制分区表
    v:验证磁盘
    w:写表格到磁盘并退出
    z:销毁GPT数据结构并退出
    ?:打印这个菜单

[root@Centos6~]#gdisk /dev/sdb                       ----------> 用gdisk对sdb硬盘进行分区
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): ?                          --------> 输入?号查看选项
b   back up GPT data to a file
c   change a partition's name
d   delete a partition
i   show detailed information on a partition
l   list known partition types
n   add a new partition
o   create a new empty GUID partition table (GPT)
p   print the partition table
q   quit without saving changes
r   recovery and transformation options (experts only)
s   sort partitions
t   change a partition's type code
v   verify disk
w   write table to disk and exit
x   extra functionality (experts only)
?   print this menu
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-209715166, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-209715166, default = 209715166) or {+-}size{KMGTP}: +1G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): L                  -----> 查看分区支持的编码
0700 Microsoft basic data  0c01 Microsoft reserved    2700 Windows RE          
3000 ONIE boot             3001 ONIE config           4100 PowerPC PReP boot   
4200 Windows LDM data      4201 Windows LDM metadata  7501 IBM GPFS            
7f00 ChromeOS kernel       7f01 ChromeOS root         7f02 ChromeOS reserved   
8200 Linux swap            8300 Linux filesystem      8301 Linux reserved      
8302 Linux /home           8400 Intel Rapid Start     8e00 Linux LVM           
a500 FreeBSD disklabel     a501 FreeBSD boot          a502 FreeBSD swap        
a503 FreeBSD UFS           a504 FreeBSD ZFS           a505 FreeBSD Vinum/RAID  
a580 Midnight BSD data     a581 Midnight BSD boot     a582 Midnight BSD swap   
a583 Midnight BSD UFS      a584 Midnight BSD ZFS      a585 Midnight BSD Vinum  
a800 Apple UFS             a901 NetBSD swap           a902 NetBSD FFS          
a903 NetBSD LFS            a904 NetBSD concatenated   a905 NetBSD encrypted    
a906 NetBSD RAID           ab00 Apple boot            af00 Apple HFS/HFS+      
af01 Apple RAID            af02 Apple RAID offline    af03 Apple label         
af04 AppleTV recovery      af05 Apple Core Storage    be00 Solaris boot        
bf00 Solaris root          bf01 Solaris /usr & Mac Z  bf02 Solaris swap        
bf03 Solaris backup        bf04 Solaris /var          bf05 Solaris /home       
bf06 Solaris alternate se  bf07 Solaris Reserved 1    bf08 Solaris Reserved 2  
bf09 Solaris Reserved 3    bf0a Solaris Reserved 4    bf0b Solaris Reserved 5  
c001 HP-UX data            c002 HP-UX service         ea00 Freedesktop $BOOT   
eb00 Haiku BFS             ed00 Sony system partitio  ed01 Lenovo system partit
Press the <Enter> key to see more codes: 
ef00 EFI System            ef01 MBR partition scheme  ef02 BIOS boot partition 
fb00 VMWare VMFS           fb01 VMWare reserved       fc00 VMWare kcore crash p
fd00 Linux RAID            
Hex code or GUID (L to show codes, Enter = 8300):    ----->直接选择默认值
Changed type of partition to 'Linux filesystem'
Command (? for help): w                                    ---------------> 写入
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y             ---------------> 可以选择不保存
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
[root@Centos6~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number  Start   End     Size    File system  Name              标志
 1      1049kB  1075MB  1074MB               Linux filesystem
  1. parted 高级分区操作 (操作都是实时生效的,小心使用)

    parted是一个磁盘分区和分区大小调整程序。它允许你创建,销毁,调整大小,移动和复制ext2,linux-swap,FAT,FAT32和reiserfs分区。它可以创建,调整大小和移动Macintosh HFS分区,以及检测jfs,ntfs,ufs和xfs分区。这对于为新操作系统创建空间,重新组织磁盘使用以及将数据复制到新硬盘非常有用。

    这个命令有两种用法,一种是直接命令使用,另外一种是交互式使用。
    用法:parted [选项]... [设备 [命令 [参数]...]...]
    parted /dev/sdb mklabel gpt | msdos 对新硬盘直接创建gpt或mbr格式分区
    命令直接使用方法

    [root@Centos6~]#parted /dev/sdb mklabel gpt          ------&gt;直接对sdb硬盘创建gpt分区
    信息: You may need to update /etc/fstab.
    [root@Centos6~]#parted /dev/sdb print                     --------查看sdb硬盘分区信息
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 107GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Number  Start  End  Size  File system  Name  标志
    [root@Centos6~]#parted /dev/sdc mklabel msdos    ------&gt;直接对sdc硬盘创建mbr分区
    信息: You may need to update /etc/fstab.
    [root@Centos6~]#parted /dev/sdc print                    --------查看sdc硬盘分区信息
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdc: 85.9GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    Number  Start  End  Size  Type  File system  标志

       -h, - 帮助 显示帮助信息
           -l,--list 列出所有块设备上的分区布局
           -m, - 机器 显示机器可解析的输出
           -s,--script 从不提示用户干预
           -v,--version  显示版本
          -a 对齐类型, - 对齐类型

    • parted /dev/sdb mkpart primary(主分区) 1 200 (默认M) 直接对磁盘分区操作
      [root@Centos6~]#parted /dev/sdb mkpart primay 1 1000
      信息: You may need to update /etc/fstab.
      [root@Centos6~]#parted /dev/sdb print
      Model: VMware, VMware Virtual S (scsi)
      Disk /dev/sdb: 107GB
      Sector size (logical/physical): 512B/512B
      Partition Table: gpt
      Number  Start   End     Size   File system  Name    标志
      1      1049kB  1000MB  999MB               primay
      [root@Centos6~]#lsblk
      NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      sr0     11:0    1  3.7G  0 rom  
      sda      8:0    0  200G  0 disk 
      ├─sda1   8:1    0  1.2G  0 part /boot
      ├─sda2   8:2    0 50.8G  0 part /
      ├─sda3   8:3    0 21.5G  0 part /app
      ├─sda4   8:4    0    1K  0 part 
      └─sda5   8:5    0    2G  0 part [SWAP]
      sdb      8:16   0  100G  0 disk 
      └─sdb1   8:17   0  953M  0 part 
      sdc      8:32   0   80G  0 disk 
  • 同步硬盘配置信息

    partprobe-重新设置内存中的内核分区表版本

    注意,这个命令不可以在Centos6中使用,只能在其他版本使用

    Centos6增加分区后,用partx -a /dev/DEVICE命令
    或者用 kpartx -a /dev/DEVICE -f: force
    如果是删除分区,用 partx -d --nr M-N /dev/DEVICE 命令

    [root@Centos6~]#lsblk
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0     11:0    1  3.7G  0 rom  
    sda      8:0    0  200G  0 disk 
    ├─sda1   8:1    0  1.2G  0 part /boot
    ├─sda2   8:2    0 50.8G  0 part /
    ├─sda3   8:3    0 21.5G  0 part /app
    ├─sda4   8:4    0 31.5K  0 part 
    ├─sda5   8:5    0    2G  0 part [SWAP]
    ├─sda6   8:6    0  1.7M  0 part 
    └─sda7   8:7    0    1G  0 part 
    sdb      8:16   0  100G  0 disk 
    └─sdb1   8:17   0    1G  0 part 
    sdc      8:32   0   80G  0 disk 
    [root@Centos6~]#partx -a /dev/sda
    BLKPG: Device or resource busy
    error adding partition 1
    BLKPG: Device or resource busy
    error adding partition 2
    BLKPG: Device or resource busy
    error adding partition 3
    BLKPG: Device or resource busy
    error adding partition 4
    BLKPG: Device or resource busy
    error adding partition 5
    [root@Centos6~]#partx -d --nr 6-7 /dev/sda
    [root@Centos6~]#lsblk
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0     11:0    1  3.7G  0 rom  
    sda      8:0    0  200G  0 disk 
    ├─sda1   8:1    0  1.2G  0 part /boot
    ├─sda2   8:2    0 50.8G  0 part /
    ├─sda3   8:3    0 21.5G  0 part /app
    ├─sda4   8:4    0 31.5K  0 part 
    └─sda5   8:5    0    2G  0 part [SWAP]
    sdb      8:16   0  100G  0 disk 
    └─sdb1   8:17   0    1G  0 part 
    sdc      8:32   0   80G  0 disk 
[root@Centos6~]#echo -e 'n\n\n\n+1G\n\nw\nY\n' |gdisk /dev/sdc
可以写到脚本中

文件系统

  • 文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统 。
  • 从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等 。
  • 支持的文件系统(跟内核相关):/lib/modules/uname –r/kernel/fs
    [root@Centos6~]#ls /lib/modules/`uname -r `/kernel/fs
    autofs4     cramfs    ext3     gfs2   mbcache.ko  squashfs   btrfs       dlm       ext4     jbd    nfs         ubifs
    cachefiles  ecryptfs  fat      jbd2   nfs_common  udf   cifs        exportfs  fscache  jffs2  nfsd        xfs   configfs    ext2      fuse     lockd  nls
    [root@Centos7~]#ls /lib/modules/`uname -r `/kernel/fs
    binfmt_misc.ko.xz  cachefiles  cifs    dlm    ext4  fscache  gfs2   jbd2   mbcache.ko.xz  nfs_common  nls        pstore    udf
    btrfs              ceph        cramfs  exofs  fat   fuse     isofs  lockd  nfs            nfsd        overlayfs  squashfs  xfs

文件系统类型

  • Linux文件系统:
    • ext2(Extended file system扩展的文件系统)
    • ext3
    • ext4
    • xfs(SGI)
    • btrfs(Oracle)
    • reiserfs
    • jfs(AIX)
    • swap
  • 光盘:iso9660
  • Windows:FAT32, exFAT,NTFS
  • Unix: FFS(fast), UFS(unix), JFS2
  • 网络文件系统:NFS, CIFS ------> 会有自己本机硬盘的感觉
  • 集群文件系统:GFS2, OCFS2(oracle)
  • 分布式文件系统: fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
  • RAW:未经处理或者未经格式化产生的文件系统 (裸xi'ton)
    [root@Centos6~]#df -T
    Filesystem     Type  1K-blocks    Used Available Use% Mounted on
    /dev/sda2      ext4   52279876 3834652  45782824   8% /
    tmpfs          tmpfs    602404     224    602180   1% /dev/shm
    /dev/sda3      ext4   22043164   44980  20871784   1% /app
    /dev/sda1      ext4    1176704   35460   1079804   4% /boot
    [root@Centos7~]#df -T
    文件系统       类型        1K-块    已用     可用 已用% 挂载点
    /dev/sda2      xfs      52403200 5567888 46835312   11% /
    devtmpfs       devtmpfs   724776       0   724776    0% /dev
    tmpfs          tmpfs      739476       0   739476    0% /dev/shm
    tmpfs          tmpfs      739476    9204   730272    2% /run
    tmpfs          tmpfs      739476       0   739476    0% /sys/fs/cgroup
    /dev/sda3      xfs      20961280   32944 20928336    1% /app
    /dev/sda1      xfs       1247232  161556  1085676   13% /boot
    tmpfs          tmpfs      147896       8   147888    1% /run/user/0
    /dev/sr0       iso9660   8490330 8490330        0  100% /run/media/root/CentOS 7 x86_64
    /dev/sr1       iso9660   3878870 3878870        0  100% /var/ftp/pub/centos/6/os/x86_64
    [root@Centos7~]#blkid /dev/sr0
    /dev/sr0: UUID="2017-09-06-10-53-42-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 

文件系统分类

  • 根据其是否支持"journal"功能: 日志型文件系统: ext3, ext4, xfs, ... 非日志型文件系统: ext2, vfat
  • 文件系统的组成部分: 内核中的模块:ext4, xfs, vfat 用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
  • Linux的虚拟文件系统:VFS
  • 查前支持的文件系统:cat /proc/filesystems
    [root@Centos6~]# cat /proc/filesystems 
    nodev   sysfs
    nodev   rootfs
    nodev   bdev
    nodev   proc
    nodev   cgroup
    nodev   cpuset
    nodev   tmpfs
    nodev   devtmpfs
    nodev   binfmt_misc
    nodev   debugfs
    nodev   securityfs
    nodev   sockfs
    nodev   usbfs
    nodev   pipefs
    nodev   anon_inodefs
    nodev   inotifyfs
    nodev   devpts
    nodev   ramfs
    nodev   hugetlbfs
    iso9660
    nodev   pstore
    nodev   mqueue
    nodev   selinuxfs
    nodev   drm
    ext4
    nodev   autofs
    nodev   fuse
    fuseblk
    nodev   fusectl

创建文件系统

  • mkfs命令:
  • (1) mkfs.FS_TYPE /dev/DEVICE
    • ext4
    • xfs
    • btrfs
    • vfat
  • (2) mkfs -t FS_TYPE /dev/DEVICE
    • -L 'LABEL': 设定卷标
[root@Centos6~]#mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2684354560
80 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
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
  • mke2fs:ext系列文件系统专用管理工具
    • -t {ext2|ext3|ext4}
    • -b {1024|2048|4096} ------------>(指定块的大小,大小根据要存储的文件来判定,如果是大文件就选用4k,如果是小文件就选用1k)
    • -L 'LABEL'
    • -j: 相当于 -t ext3 mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
      -i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小 (就是设定inode和块的比例)
      -N #:指定分区中创建多少个inode
      -I 一个inode记录占用的磁盘空间大小,128---4096
      -m #: 默认5%,为管理人员预留空间占总空间的百分比
      -O FEATURE[,...]:启用指定特性
      -O ^FEATURE:关闭指定特性
      [root@Centos6~]#blkid                    ----->查看是否创建成功
      /dev/sdb1: UUID="4ef74306-f8c0-4733-84b0-8acdab41fa03" TYPE="ext4" 
  • tune2fs:重新设定ext系列文件系统可调整参数的值 (只能管理ext系统)
    • -l:查看指定文件系统超级块信息;super block
    • -L 'LABEL':修改卷标 (卷标的命名最好就是后续挂载点的名字或者要使用的性能名字)
    • -m #:修预留给管理员的空间百分比
    • -j: 将ext2升级为ext3
    • -O: 文件系统属性启用或禁用, –O ^has_journal
    • -o: 调整文件系统的默认挂载选项,–o ^acl
    • -U UUID: 修改UUID号
      [root@Centos6~]#tune2fs -o acl /dev/sdb1       ----->Centos6安装系统后,手工分的ext文件系统是没有acl功能的,需要手工添加
      tune2fs 1.41.12 (17-May-2010)
      [root@Centos6~]#tune2fs -l /dev/sdb1
      tune2fs 1.41.12 (17-May-2010)
      Filesystem magic number:  0xEF53                ------->file命令通过魔术信息判断文件内容是什么格式的文件
      Default mount options:    (none)                     -------> 硬盘挂载信息
      Filesystem state:         clean                          -------->文件系统状态,clean代表正常,如果noclean代表数据可能被破坏
      .......
      Default mount options:    user_xattr acl          ------> 文件系统是否有 acl 权限
      Filesystem features:      **has_journal** ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
      有has journal 就代表有日志功能
      [root@Centos6~]#mke2fs -j /dev/sdb2                ----->给ext2增加日志功能,就相当于变成ext3格式了
      mke2fs 1.41.12 (17-May-2010)
      [root@Centos6~]#blkid
      /dev/sdb2: UUID="37a5c45f-6944-4c8b-a5bf-9e619349f7f8" SEC_TYPE="ext2" TYPE="ext3" 
      [root@Centos6~]#tune2fs -O has_journal /dev/sdb2        -------->也可以用命令增加功能
      tune2fs 1.41.12 (17-May-2010)
      Creating journal inode: 完成
      This filesystem will be automatically checked every 25 mounts or
      180 days, whichever comes first.  Use tune2fs -c or -i to override.

      xfs文件系统,如果分区已经有了文件系统,再次创建时候会有提示,如果选择覆盖,就会覆盖之前的系统。
      xfs系统和ext系列是完全不同的系统,之间无法转换。
      磁盘的路径名称及文件系统的卷标都可能会变,最好选择磁盘文件系统的UUID号,只有更换文件系统才会变更UUID号,不然不会改变

[root@Centos6~]#mkfs.ext4 /dev/sdb2 -L /mnt/sdb2
mke2fs 1.41.12 (17-May-2010)
文件系统标签=/mnt/sdb2
........
[root@Centos6~]#blkid
/dev/sdb2: LABEL="/mnt/sdb2" UUID="352eae7e-722b-4b6c-a895-948decd43157" TYPE="ext4" 
  • 卷标
    • 指向设备的另一种方法
    • 与设备无关
  • blkid 命令:块设备属性信息查看
    • blkid [OPTION]... [DEVICE]
    • -U UUID: 根据指定的UUID来查找对应的设备
    • -L LABEL:根据指定的LABEL来查找对应的设备
  • e2label:管理ext系列文件系统的LABEL
    • e2label DEVICE [LABEL]
      *findfs :查找分区
    • findfs [options] LABEL=<label>
    • findfs [options] UUID=<uuid>
  • dumpe2fs:
  • 块分组管理,32768块
    • -h:查看超级块信息,不显示分组信息

*文件系统检测和修复

常发生于死机或者非正常关机之后
挂载为文件系统标记为“no clean”
注意:一定不要在挂载状态下修复
fsck: File System Check

fsck.FS_TYPE
fsck -t FS_TYPE
-p: 自动修复错误
-r: 交互式修复错误
FS_TYPE一定要与分区上已经文件类型相同

e2fsck:ext系列文件专用的检测修复工具

-y:自动回答为yes
-f:强制修复

[root@Centos7~]#dd if=/dev/zero of=/dev/sdb1 bs=1M count=10            --------->用0替换文件系统前10M数据
[root@Centos7~]#tune2fs -l /dev/sdb1                                                       --------->导致查看不了文件系统信息
tune2fs 1.42.9 (28-Dec-2013)
找不到有效的文件系统超级块.
[root@Centos7~]#fsck /dev/sdb1                                                               ---------> 用fack命令修复,但一定要提前取消挂载**虽然能修复,但有数据丢失风险极大**
fsck,来自 util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
ext2fs_open2: Bad magic number in super-block
fsck.ext2: 超级块无效, trying backup blocks...
超级块包含无效的 ext3 日志(inode 8).
清除<y>? 是
*** ext3 journal has been deleted - filesystem is now ext2 only ***
/dev/sdb1 was not cleanly unmounted, 强制检查.
Resize inode not valid.  重建<y>? 是
第一步: 检查inode,块,和大小
根inode不是一个目录.  清除<y>? 是
第二步: 检查目录结构
第3步: 检查目录连接性
根inode not allocated.  分配<y>? 是
/lost+found未找到.创建<y>? 是
Pass 4: Checking reference counts
第5步: 检查簇概要信息
块位图差异:  +(0--9251) +(32768--33794) +(98304--99330) +(163840--164866) +(229376--230402) +(294912--295938) -(1081344--1114111)
处理<y>? 是
Free 块s count wrong for 簇 #0 (23509, counted=23514).
处理<y>? 是
Free 块s count wrong for 簇 #33 (0, counted=32768).
处理<y>? 是
Free 块s count wrong (2538301, counted=2571074).
处理<y>? 是
Inode位图差异:  +1 +(3--10)
处理<y>? 是
Free inodes count wrong for 簇 #0 (8180, counted=8181).
处理<y>? 是
Directories count wrong for 簇 #0 (3, counted=2).
处理<y>? 是
Free inodes count wrong (655348, counted=655349).
处理<y>? 是
重建日志<y>? 是
Creating journal (32768 blocks): y完成.
*** journal has been re-created - filesystem is now ext3 again ***
/dev/sdb1: ***** 文件系统已修改 *****
/dev/sdb1: 11/655360 files (0.0% non-contiguous), 83134/2621440 blocks
[root@Centos7~]#tune2fs -l /dev/sdb1                                                             --------->查看修复后的文件系统信息
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>                                                                  --------->文件系统卷标
Last mounted on:          <not available>                                                   ---------> 挂载位置
Filesystem magic number:  0xEF53                                                          --------->魔术信息
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem state:         clean                                                                      --------->文件系统状态
Inode count:              655360                                                                     --------->最多的inode数(如果是大文件,节点默认即可,如果是小文件,可以增加数量)
Block count:              2621440                                                                   --------->块的个数 (块数一定大于节点数)
Reserved block count:     131072                                                                --------->给root预留的空间,只能root用,可以按照比例来设定
Block size:               4096                                                                         --------->块的大小,最大4k(大小的选择根据文件的情况来定夺,但后期无法修改)
.......
Mount count:              0                                                                              --------->挂载次数
Maximum mount count:      -1                                                                    --------->挂载多少次后,开始系统检查
Inode size:           256                                                                                  --------->单个inode的大小,不能太小,否则容易出问题
Last checked:             Tue Dec  5 20:31:23 2017

xfs文件系统命令

[root@Centos7~]#xfs
xfs_admin      xfs_db         xfs_freeze     xfs_info       xfs_logprint   xfs_mkfile     xfs_repair(修复文件系统命令)     
xfs_bmap       xfsdump        xfs_fsr        xfsinvutil     xfs_mdrestore  xfs_ncheck     xfsrestore     
xfs_copy       xfs_estimate   xfs_growfs(文件系统扩展)     xfs_io         xfs_metadump   xfs_quota      xfs_rtcp  

怎么取两个文件的交集?**

[root@Centos7~]#grep -f f1 f2

转载于:https://blog.51cto.com/exia00linux/2049497

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值