Linux磁盘管理

一、硬盘的接口类型

分区肯定是对硬盘进行分区,那么先来聊一聊硬盘的接口类型,硬盘就现在来分,分为两类,并行接口和串行接口,现在服务器及PC机上普遍的都是串行接口啦。

并行接口,分为IDE与SCSI两种接口,并行接口的缺点在于电信号在传输的过程中会产生干扰。

接口速率:  IDE:133MB/s         SCIS:640MB/s

串行接口,分为STAT,SAS,USB,三种接口,我们的服务器和PC上部分上也是采用的SATA接口

串口: SATA:6Gbps     SAS:6Gbps       USB:480MB/s

现在的磁盘分区模式分为两种,MBR、GPT两种。

MBR: Master Boot Record,使用32位系统或者64位,分区不超过2T

MBR模式可以分区的数量是:4个主分区;3主分区+1扩展(N个逻辑分区)

分区信息就在0磁道0扇区:512bytes。

开始446bytes存放boot loader,中间64bytes存放分区表,每个分区表16bytes

最后2bytes:存放55AA来表示分区结束标识符

GPT:GUID(Globals Unique Identifiers)partition table 支持128个分区,使用64位,最大18EB

使用128位UUID(Universally Unique Identifier) 表示磁盘和分区GPT分区表自动备份在头和尾两份

二、分区工具fdiskgdiskfdiskgdisk用法一样

fdisk /dev/sdb

fdisk -l [-u] [device...] 查看硬盘及分区的信息

常用的子命令:

m 帮助列表     p 分区列表    l 查看分区类型    t 更改分区类型

n 创建新分区   d 删除分区    w 保存并退出     q 不保存并退出

fdisk分区后,操作只是在内存中并未真正的对硬盘分区,如果真的需要分区w保存即可

fdisk非交互式分区:echo -e "n\np\n1\n+1G\nn\np\n2\n+2G\nw" |fdisk /dev/sdb

三、强大的分区工具parted:

parted工具的分区是即时操作的,所以分区的时候要小心慎用,因为可能一个不小心就把再用的硬盘给分区了,所以使用时,一定要谨慎谨慎再谨慎。

用法:parted [选项]... [设备[命令[参数]...]...]

parted /dev/sdb mklabel gpt|msdos 为磁盘指定模式

parted /dev/sdb print   显示磁盘信息

parted /dev/sdb mkpart primary/extended/logical 0 200 (默认M)创建分区类型及大小

parted /dev/sdb rm 1  删除分区

parted -l   显示所有磁盘的信息

非交互式分区:

parted /dev/sdb mklabel gpt Yes   设置分区为GPT分区

parted /dev/sdb mkpart primary 0 10 Ignore      设置一个大小为10MB的主分区

parted /dev/sdb mkpart primary linux-swap 11 21 Ignore   设置一个大小为10MB的swap分区

parted /dev/sdb mkpart logical ext4 22  32 Ignore   设置一个大小为10MB的ext4类型的逻辑分区

parted /dev/sdb p    查看sdb磁盘的分区信息

四、如何使用DD命令创建swap分区

# dd if=/dev/zero of=/var/swapfile bs=1M count=1024 //生成1024M大小的空文件

# mkswap /var/swapfile  //设置为swap分区

# swapon /var/swapfile  //开启swap分区

# chmod 7777 /var/swapfile //设置权限为7777,以便无论哪个用户启动系统都能正常运作

# echo /var/swapfile swap swap defaults 0 0 >> /etc/fstab  //设置开机自动挂载

 

  • 硬盘blockinode详解:

superblock:记录文件系统的整体信息,包括inode与block总量、使用大小、剩余大小以及文件系统的格式与相关信息等。

inode:记录文件的属性、权限,同时会记录该文件的数据所在的block编号。

block:存储文件的内容,如果文件超过默认block大小,会自动占用多个block。

  • 相看Linux分区block大小:

dumpe2fs  /dev/sda1|grep "Block size"

tune2fs  /dev/sda1|grep "Block size"

stat /boot/ |grep "IO Block"

  • 相看Linux系统inode:格式化时默认为128B256B  /boot分区为128B 其他分区为256B

mkfs.ext4  -b 4096 -I 256 /dev/sdb         格式化分区时指定blockinode大小

dumpe2fs /dev/sda1 |grep "Inode size"

tune2fs -l /dev/sda1 |grep "Inode size"

stat /boot/ |grep "Inode"

  • 硬链接与软链接:

硬链接只对当前分区有效不能跨区,只能对文件生效不能对目录生效:ln file1 file2

软件链接可以跨区,可以对目录与文件生效:ln -s file1 file2

  • 开机自动挂载:

echo "mount /dev/sdb1 /data >> /etc/rc.local

echo "/dev/sdb1  /data/  ext4  defaults 0 0"  >> /etc/fstab

mount -o rw,remount /      重新挂载/系统 ,检测/etc/fstab是否有误

  • 基于GPT格式磁盘分区:

parted -s /dev/sdb mklabel gpt 设置分区格式为GPT格式

mkfs.ext3 /dev/sdb   基于ext3文件系统类型格式化

mount /dev/sdb /data/  挂载

parted命令分区:

parted;select /dev/sdb ;mklabel gpt ;mkpart primary 0 1000 ;print ; mkfs.ext3 /dev/sdb1

  • 企业常用mount案例: 

mount /dev/sdb1 /data   挂载/dev/sdb1 分区至/data/目录

mount /dev/cdrom  /mnt  挂载cdrom光盘至/mnt目录

mount -t ntfs-3g /dev/sdc  /data1  挂载移动硬盘至/data1目录

mount -o iso9660 -o loop centos7.iso /mnt  将CentOS7.iso镜像文件挂载至/mnt目录

mount -t fat32  /dev/sdd1  /mnt  将U盘/dev/sdd1挂载至/mnt/目录

mount -t nfs 192.168.1.11:/data/  /mnt 将远程192.168.1.11:/data 目录挂载至/mnt目录

  • Linux硬盘故障修复:

硬盘出现Read-only file system只能读取不能写入的故障:

1、远程备份本地其他重要数据,出现只读文件系统,备份重要数据,基于rsync|scp远程备份,基本/data为源目录,/data/backup/2017/为目标备份目录;

rsync -av /data/ root@x.x.x.x:/data/backup/2017/

2、可以重新挂载/系统,挂载命令如下,测试文件系统是否可以写入文件。

mount -o remount,rw /

3、如果重新挂载/系统无法解决问题,刚需重启服务器以CD/DVD光盘引导进入linux rescue修复模式,光盘引导后选择:Troubleshooting 按Enter键,然后选择rescue a centos system ,按Enter键。

4、选择1)Continue 继续操作;

5、进入修复模式,执行如下命令,df -h显示原来的文件系统:chroot /mnt/sysimage ;  df -h

6、对有异常的分区进行检测并修复,根据文件系统类型,执行如下命令:

umount /dev/sda3

fsck.ext4 /dev/sda3 -y

7、修复完成后重启:reboot

  • RAID配置:

配置如下:其中,-C参数代表创建一个RAID阵列卡;-v参数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0就是创建后的RAID磁盘阵列的名称;-a yes参数代表自动创建设备文件;-n 4参数代表使用4块硬盘来部署这个RAID磁盘阵列;而-l 10参数则代表RAID 10方案;最后再加上4块硬盘设备的名称就搞定了。

[root@linuxprobe ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde

其次,把制作好的RAID磁盘阵列格式化为ext4格式。

[root@linuxprobe ~]# mkfs.ext4 /dev/md0

再次,创建挂载点然后把硬盘设备进行挂载操作。挂载成功后可看到可用空间为40GB。

[root@linuxprobe ~]# mkdir /RAID
[root@linuxprobe ~]# mount /dev/md0 /RAID
[root@linuxprobe ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 3.0G 15G 17% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 84K 914M 1% /dev/shm
tmpfs 914M 8.9M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sr0 3.5G 3.5G 0 100% /media/cdrom
/dev/sda1 497M 119M 379M 24% /boot
/dev/md0 40G 49M 38G 1% /RAID

最后,查看/dev/md0磁盘阵列的详细信息,并把挂载信息写入到配置文件中,使其永久生效。

[root@linuxprobe ~]# mdadm -D /dev/md0
[root@linuxprobe ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab

[root@linuxprobe ~]# mkdir /RAID

[root@linuxprobe ~]# mount -a

现在创建一个RAID 5磁盘阵列+备份盘。在下面的命令中,参数-n 3代表创建这个RAID 5磁盘阵列所需的硬盘数,参数-l 5代表RAID的级别,而参数-x 1则代表有一块备份盘。当查看/dev/md0(即RAID 5磁盘阵列的名称)磁盘阵列的时候就能看到有一块备份盘在等待中了。

[root@linuxprobe ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /de

[root@linuxprobe ~]# mkfs.ext4 /dev/md0

[root@linuxprobe ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab

[root@linuxprobe ~]# mkdir /RAID

[root@linuxprobe ~]# mount -a