Linux磁盘管理
硬盘:
机械式硬盘
SSD 固态硬盘
机械式:
track磁道
sector扇区: 最小的纹理存储单位,每个扇区大小为512bytes
cylinder柱面: 分区的基本单位;
硬盘第一个扇区 512bytes
MBR:Master Boot Record 硬盘主引导记录
MBR占 446 bytes: bootloader
分区表(pratition table) 占64bytes: filesystem allocation table
分区表中每16bytes 标识一个分区,所以主分区和扩展分区最多可以有4个;
2bytes:55AA 标志位,55AA表示生效,其他表示无效
磁盘接口类型:
IDE(ATA):速度 133MB/s,/dev/hd
SCSI: 速度 640MB/s
SATA:速度 6Gbps
SAS:速度 6Gbps
USB:速度 480MB/s
识别硬盘设备:
各种接口的磁盘在linux中的文件命名,在centos6之后都命名为 :/dev/sd*
标记不同的硬盘设备:/dev/sd[a-z]
标记同一设备上的不同分区:/dev/sd[a-z][1-]
1-4:命名主或扩展分区标识
5+:逻辑分区标识
设备文件:特殊文件
设备号:
major,minor
major: 表示设备类型
minor: 同一类型下的不同设备
“块”:block,随机设备
“字符”:character,线性设备
GPT:GUIDPartition Table
磁盘管理
在linux系统中增加一块新磁盘,需要
1 对磁盘进行分区
2 对分区进行格式化,创建可用文件系统
3 创建挂载点,并且将其挂载
磁盘与目录的容量
df命令: 列出文件系统的整体磁盘使用情况 report file system disk space usage
语法: df [OPTION]... [FILE]...
选项:
-a:列出所有文件系统
-k或-m:以KB,MB的单位显示文件系统
-h:以易读的GB,MB,KB等格式显示
-i:不用硬盘容量,以inode的数量显示
-T :显示分区文件系统类型
示例:
#列出文件系统整体磁盘使用情况 [root@localhost ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda3 9947976 551432 8868160 6% / devtmpfs 493016 0 493016 0% /dev tmpfs 501580 0 501580 0% /dev/shm tmpfs 501580 6792 494788 2% /run tmpfs 501580 0 501580 0% /sys/fs/cgroup /dev/sda2 20027216 1112520 17874312 6% /usr /dev/sda1 194235 90696 89203 51% /boot /dev/sda5 9947976 36976 9382616 1% /home #显示文件系统各个分区格式 [root@localhost ~]# df -T Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sda3 ext4 9947976 551432 8868160 6% / devtmpfs devtmpfs 493016 0 493016 0% /dev tmpfs tmpfs 501580 0 501580 0% /dev/shm tmpfs tmpfs 501580 6792 494788 2% /run tmpfs tmpfs 501580 0 501580 0% /sys/fs/cgroup /dev/sda2 ext4 20027216 1112520 17874312 6% /usr /dev/sda1 ext4 194235 90696 89203 51% /boot /dev/sda5 ext4 9947976 36976 9382616 1% /home # [root@localhost ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/sda3 ext4 9.5G 539M 8.5G 6% / devtmpfs devtmpfs 482M 0 482M 0% /dev tmpfs tmpfs 490M 0 490M 0% /dev/shm tmpfs tmpfs 490M 6.7M 484M 2% /run tmpfs tmpfs 490M 0 490M 0% /sys/fs/cgroup /dev/sda2 ext4 20G 1.1G 18G 6% /usr /dev/sda1 ext4 190M 89M 88M 51% /boot /dev/sda5 ext4 9.5G 37M 9.0G 1% /home
Filesystem:表示各个分区,列出设备名
Type:文件系统格式
1k-blocks:1k表示下面数字的单位
Used:已用空间
Avail:可用空间
Use%:磁盘使用率
Mounted on:磁盘挂载点
du命令:统计目录所占容量
du [OPTION]... [FILE]...
参数:
-a:列出所有文件与目录容量
-h:以易读的容量单位KB,MB,GB显示
-s:列出总量
-S:不包含子目录下的总计
示例:
# 后面不加目录或文件名 默认分析当前所在目录 [root@localhost test]# du 4 ./testbash 28 . [root@localhost test]# du -a 16 ./functions 4 ./testbash 4 ./test_vim 28 . [root@localhost test]# du -h 4.0K ./testbash 28K . [root@localhost test]# du -sh /etc/ 22M /etc/ [root@localhost test]# du -S 4 ./testbash 24 .
分区:分隔存储空间为多个小的空间,每个空间可独立使用文件系统;
分区工具:
fdisk,parted, sfdisk
fdisk工具的使用:
最多支持在一块硬盘上的15个分区;
fdisk DEVICE:DEVICE为设备文件名,后边不要加数字,因为分区是针对整个硬盘设备
分区管理子命令:
p: 显示当前分区表
n: 创建新分区
d: 删除指定分区
t: 修改分区ID
l: 列出所有支持分区类型及Id
w: 保存退出
q: 放弃修改并退出
m: 获取帮助
创建完成之后,查看内核是否已经识别新的分区:
#cat /proc/partitions
有三个命令可以让内核重读磁盘分区表:
CentOS5: partprobe [DEVICE]
CentOS6,7下命令:
partx
kpartx
partx命令:
partx DEVICE
partx -a DEVICE
登记某块盘上的所有分区信息,如果某个分区信息已有记录,就会报错
如果某磁盘上的分区信息都没有被记录,则安静完成。
partx -a -n M:N DEVICE 记录第M个到N个分区信息
M 读入第M个分区信息
M: 指定读入分区号的最小值
:N 指定读入 分区号的最大值
kpartx命令:从分区表建立设备映射
kpartx -af DEVICE
-a:添加分区映射
Linux文件系统管理
文件系统:
VFS:Virtual FileSystem
保证各种磁盘设备接口都可以使用
Linux:ext2, ext3,ext4, reiserfs, xfs, btrfs, swap
光盘:iso9660
Windows:fat32(vfat), ntfs
Unix:ffs, ufs, jfs, jfs2
网络文件系统:nfs,cifs
集群文件系统:ocfs2,gfs2
分布式文件系统:ceph,
moosefs,mogilefs, hdfs, gfs, glusterfs
(1)日志型文件系统
非日志型文件系统:ext2
日志型文件系统:ext3
(2)swap:交换分区
把硬盘当临时内存来使用
创建文件系统:
在分区上执行格式化(高级格式化)
要使用某种文件系统,满足两个条件:
内核中:支持此种文件系统
用户空间:有文件系统管理工具
创建工具:mkfs(make filesystem)
mkfs -t type DEVICE
mkfs.type DEVICE
mkfs [Tab][Tab] 查看mkfs支持的文件格式
mkfs.cramfs mkfs.ext3 mkfs.minix
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.xfs
ext系列文件系统的专用管理工具:
mke2fs -t {ext2|ext3|ext4} DEVICE
-b BLOCK: 1024, 2048, 4096 指定块大小;根据存储文件的大小决定块分配大小
-L 'LABEL': 设定卷标名称
-i #:给多大空间给一个inode
-N #:为此磁盘分区一共保留多少个inode
-m #:预留磁盘空间占据多大百分比的空间为后期管理使用
-c:检查磁盘错误,仅下达一次-c时,会进行快速读取测试
-j:相当于 mk2fs -t ext3; 本来mke2fs是ext2,加入journal成为ext3
-O feature[,...] 启用指定特性
has journal 启用日志功能
-O ^feature[,...] 关闭指定特性 /etc/mke2fs.conf 默认特性配置文件
blkid命令:定位并显示块设备属性 locate/print block device attributes
blkid DEVICE
查看 LABEL,UUID, TYPE
示例:
#查看磁盘状况 有一块/dev/sdb新磁盘 [root@localhost ~]# fdisk -l Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000c2314 Device Boot Start End Blocks Id System /dev/sda1 * 2048 411647 204800 83 Linux /dev/sda2 411648 41371647 20480000 83 Linux /dev/sda3 41371648 61851647 10240000 83 Linux /dev/sda4 61851648 251658239 94903296 5 Extended /dev/sda5 61855744 82335743 10240000 83 Linux /dev/sda6 82337792 86532095 2097152 82 Linux swap / Solaris /dev/sda7 61853696 61855743 1024 83 Linux /dev/sda8 86534144 107505663 10485760 83 Linux Partition table entries are not in disk order Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes #在新磁盘上创建新分区 [root@localhost ~]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0x3bb13419. Command (m for help): n ------------------->创建新分区 Partition type: p primary (0 primary, 0 extended, 4 free) ----> 选择创建主分区 e extended -----------------------------------> 选择创建扩展分区 Select (default p): p -----------------------------> 创建主分区 Partition number (1-4, default 1): 1 First sector (2048-41943039, default 2048): ----->选择开始柱面 默认2048开始 Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1024M Partition 1 of type Linux and of size 1 GiB is set Command (m for help): p ----------------------> 打印分区表信息 # 说明 上面创建分区大小有两种方式 # 1 输入开始柱面和结束柱面,决定分区大小 # 2 直接输入 +xx单位 分配分区大小 Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x3bb13419 Device Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 83 Linux Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): e -------------------> 创建扩展分区(最多创建一个扩展分区) Partition number (2-4, default 2): 2 First sector (2099200-41943039, default 2099200): Using default value 2099200 Last sector, +sectors or +size{K,M,G} (2099200-41943039, default 41943039): Using default value 41943039 Partition 2 of type Extended and of size 19 GiB is set Command (m for help): n Partition type: p primary (1 primary, 1 extended, 2 free) l logical (numbered from 5) --------->因为前面创建了扩展分区,所以有了逻辑分区 Select (default p): l Adding logical partition 5 First sector (2101248-41943039, default 2101248): 512 Value out of range. First sector (2101248-41943039, default 2101248): Using default value 2101248 Last sector, +sectors or +size{K,M,G} (2101248-41943039, default 41943039): +512M Partition 5 of type Linux and of size 512 MiB is set Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x3bb13419 Device Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 83 Linux /dev/sdb2 2099200 41943039 19921920 5 Extended /dev/sdb5 2101248 3149823 524288 83 Linux Command (m for help): w # 输入q 不保存操作,退出fdisk # 输入w 将操作写入分区表 The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. #查看分区信息 [root@localhost ~]# cat /proc/partitions major minor #blocks name 8 0 125829120 sda 8 1 204800 sda1 8 2 20480000 sda2 8 3 10240000 sda3 8 4 1 sda4 8 5 10240000 sda5 8 6 2097152 sda6 8 7 1024 sda7 8 8 10485760 sda8 8 16 20971520 sdb 8 17 1048576 sdb1 8 18 1 sdb2 8 21 524288 sdb5 11 0 651264 sr0 #重读分区信息 [root@localhost ~]# partx /dev/sdb NR START END SECTORS SIZE NAME UUID 1 2048 2099199 2097152 1G 2 2099200 41943039 39843840 19G 5 2101248 3149823 1048576 512M #磁盘格式化 mkfs 将刚才创建的sdb1 格式化为xfs 格式 [root@localhost ~]# mkfs -t xfs /dev/sdb1 meta-data=/dev/sdb1 isize=256 agcount=4, agsize=65536 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=262144, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 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 #查看分区格式 [root@localhost ~]# blkid /dev/sdb1 /dev/sdb1: UUID="a7712c0d-6264-496e-8f6b-1da5b7da5939" TYPE="xfs" #使用mkfs.ext4 DEVICE 格式化/dev/sdb5为ext4 [root@localhost ~]# mkfs.ext4 /dev/sdb5 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 32768 inodes, 131072 blocks 6553 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=134217728 4 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done #查看分区格式 [root@localhost ~]# blkid /dev/sdb5 /dev/sdb5: UUID="7ff064f9-49c8-466d-8d86-7f4eba5e353b" TYPE="ext4" #ext系列文件系统的专用管理工具 创建分区 [root@localhost ~]# mke2fs -t ext4 -L 'test_mk2fs' /dev/sdb6 mke2fs 1.42.9 (28-Dec-2013) Filesystem label=test_mk2fs OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 32768 inodes, 131072 blocks 6553 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=134217728 4 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done
如有错误,敬请指正!
谢谢!