磁盘管理

本章节主要介绍磁盘分区、文件系统、挂载、以及swap,另外还有工具dd的使用等等。

新加磁盘

echo   ‘- – -’  > /sys/class/scsi_host/host2/scan       //使新加磁盘生效

lsblk      //查看磁盘      或       ls    /dev/sd*     -l     或  cat   /proc/partitions

dd   if=/dev/zero   of=f1  bs=1M   count=1024   //可用来测磁盘速度

设备文件:

一切皆文件: open()  ,  read() ,   write() ,   close()

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

字符设备块设备区别

块设备是物理存在的,有缓存,  随机访问,以块为单位存储

字符设备没有缓存,按顺序访问,以字符为单位存储

mknod     /data/sdA    b  8  1     //创建指定类型的设备

设备号码: 主设备号(标识设备类型); 次设备号(标识同一类型下的不同设备)

硬盘接口类型:并行   串口     rpm(磁盘转速)

磁盘设备的设备文件命名: /dev/DEV_FILE

虚拟磁盘:/dev/vd      (例如云服务器)

不同版本的系统的硬盘名称不同

分区的设备名称不稳定;

磁盘的容量大小计算:512*扇区数(sector)*磁道数(track)*盘面数(head)

一个磁道用6位二进制数表示扇区数,最多有64个扇区

10位存放磁道数,最多有1024磁道

8位存放磁头,最多有256磁头

柱面(cylinder):所有相同磁道组成的柱面

区位记录磁盘扇区结构:ZBR(区位记录:Zoned Bit Recording)

CHS(磁盘三围 :c代表柱面,h磁头,s扇区)和LBA:

CHS:采用24bit位寻址;最大寻址空间为8GB

LBA: 采用48bit位寻址;最大寻址空间为128PB

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

磁盘的使用:分区;创建文件系统:格式化;挂载:分配目录名

磁盘为什么分区:

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

两种分区方式:MBR,GPT

MBR分区:分区不超过2T;按柱面分区;使用32位表示扇区数

结构:

10

0磁道0扇区:446bytes   //用于启动计算机

64 bytes   //分区表    其中    16bytes: //标识一个分区

2bytes   :   55AA标记位

dd  if=/dev/sda   of=/data/mbr_back    bs=1  count=512  //备份分区表

dd  if=/dev/zero   of=/dev/sda    bs=1  count=512      //破坏分区表

救援模式修复分区表

重启,第三项(troubleshooting),第二项(救援模式),选1继续;设置IP地址(ifconfig    ens32    192.168.10.100/24),拷贝备份的分区表文件,恢复分区表   dd if=mbr_bak   of =/dev/sda

硬盘主导记录MBR由四个部分组成:

  1. 主引导程序,负责从活动分区中加载,并运行系统引导程序
  2. 出错信息数据区
  3. 分区表
  4. 结束标志字,偏移地址01FE—01FF的2个字节值为结束标志55AA

dd  if =/dev/sda  of=/dev/sdd    bs=1  count=512   //克隆分区,仅克隆主分区(MBR)

dd  if=/dev/sda   of=/data/mbr_back    bs=1  count=2  -skip=510  //破坏55AA标记

GPT分区

GUID;支持128个分区,使用64位,支持8Z    64Z

使用128位UUID表示磁盘和分区GPT分区表自动备份在头和尾两份并有CRC校验位

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

uuidgen        //生成随机的UUID

管理分区

列出块设备:lsblk

创建分区使用:fdisk   创建MBR分区;

gdisk  创建GPT分区

parted  高级分区操作

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

parted命令(parted的操作都是实时生效的,小心使用)

parted    /dev/sdb    mklabel   gpt|msdos        //创建分区,并指定分区的类型

parted  /dev/sdb  mkpart   primary  1 1000(默认以M为单位) //创建分区指定大小

parted    /dev/sdb      print    //显示分区情况

parted    /dev/sdb      rm   数字  //删除分区

parted   -l    //列出分区信息(可跟设备名,查看某设备的具体分区情况)

创建逻辑分区后,删除第一个逻辑分区,其他的逻辑分区的名称会发生变化

分区工具fdisk和gdisk

fdisk  -l  -[u]  [device…]  查看分区  或   lsblk   两者结果不同,需同步分区表

fdisk  /dev/sdb   管理分区

子命令:   p  分区列表       t   更改分区类型        o  创建一个空的mbr分区

n 创建新的分区        d删除分区           v  校验分区

u 转换单位            w 保存退出          q  不保存退出

同步分区表

查看内核是否已经识别新的分区:cat  /proc/partitions

Centos6中:

新增分区: partx  -a   /dev/DEVICE    //实现分区同步

Kpartx      -a    /dev/DEVICE     -f:  force   //实现分区同步

删除分区:  partx  -d  –nr M-N  /dev/DEVICE

Centos7使用partprode              partprode   [/dev/DEVICE]

文件系统:负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志 ,压缩,加密等

支持的文件系统:   /lib/modules/uname -r/kernel/fs   //存放了所有的文件系统

Linux  文件系统:ext2 ,ext3,ext4,xfs(SGI) ,btrfs (Oracle) ,reiseerfs,jfs(AIX) ,swap

网络文件系统:NFS            CIFS

集群文件系统:  GFS2       OCFS2 (oracle)

分布式文件系统: fastdfs ,ceph ,moosefs ,mogilefs ,glusterfs ,Lustre

Raw :未经处理或未经格式化产生的文件系统

文件系统分类

根据其是否支持”journal”功能:

日志型文件系统:ext3 , ext4 ,xfs ,….

非日志型文件系统:ext2 ,vfat

cache   针对读操作(缓存)

buffer    针对写操作(缓冲区)

文件系统的组成部分

内核中的模块: ext4 ,xfs , vfat

用户空间的管理工具:mkfs.ext4  ,mkfs.xfs , mkfs.vfat

Linux的虚拟文件系统:VFS

查看支持的文件系统: cat  /proc/filesystems

blkid   /dev/sdb1    //查看设备的文件系统类型

df   -T    //查看已挂载的块设备的文件系统

blkid     //查看全部块设备的文件系统类型

创建文件系统

mkfs  命令:  mkfs.FS_TYPE  /dev/DEVICE

ext4 ,xfs , vfat  ,btrfs

mkfs  -t  FS_type  /dev/DEVICE

-L  ‘label’   :设定卷标

创建ext文件系统:

mke2fs  :ext 系列文件系统的专用管理工具

-m    默认5%,可指定预留空间占总空间的百分比

-b    {1024|2018|4096}  块大小

-l     一个节点记录占用的磁盘空间大小

-L “将来挂载点目录”     加卷标

-i     为数据创建iNode ,该大小不小于块大小

-O  FEATURE   启用某功能

-O  ^FEATURE    禁用某功能

文件系统标签:指向设备的另一种方法,与设备无关

blkid  :块设备属性信息查看

blkid   [option]…   [device]

-U   UUID   :根据指定的UUID来查找对应的设备文件

-L    LABEL :根据指定的LABEL来查找对应的设备文件

e2label  :管理ext系列文件系统的LABEL

e2label   DEVICE   [LABEL]     修改卷标

blkid -U grep "/data" /etc/fstab |cut -d " " -f1 |cut -d= -f2 查看/data对应设备文件

blkid -U grep "/data" /etc/fstab |sed -r "s@UUID=(.*) /data.*@\1@"

findfs:查找分区

findfs   [options]   LABEL=<label>    以卷标为搜索条件,查找设备名

findfs   [options]  UUID=<uuid>

tune2fs: 重新设定ext系列文件系统可调整参数的值

-l   查看指定文件系统超级块信息;super block

-L  ‘LABEL’     修改卷标

-m  #     修预留给管理员的空间百分比

-j    将ext2 升级为ext3

-O  文件系统属性启用或禁用    -O  ^FEATURE   禁用

-o   调整文件系统默认的挂载选项

-U   UUID    修改UUID号

tune2fs   -o   acl  /dev/sdb1    //在centos6上需对新加块设备设置acl功能

centos7上新创建的分区默认就有acl功能

dumpe2fs  :  块分组管理,32678块

-h    查看超级块信息,不显示分组信息

文件系统检测和修复(常发生于死机或非正常关机后)

挂载为文件系统标记为:“no   clean”(注意,不要在挂载状态下修复)

fsck   -t  FS_TYPE    或   fsck.FS_TYPE  (修复文件系统时,不能处于挂载状态)

-p   自动修复错误

-r    交互式修复错误

-y    自动回答yes

FS_TYPE     与分区上已经存在的文件类型相同

fsck     //修复文件系统(修复的是软件逻辑上的破坏)

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

-y    自动回答yes

-f     强制修复

超级快和inode table :

块大小:4KB

超级快:存放当前分区的元数据信息

inode  table:存放文件的元数据,属性,大小,权限

挂载mount:(普通用户不能挂载)

注意:一个挂载点同一时间只能挂一个设备;一个设备可同时挂载到多个目录

挂载点下的源文件在挂载完成后会被临时隐藏

挂载点:(事先存在,建议使用空目录,进程正在使用中的设备无法被卸载)

挂载:将额外的文件系统与根文件系统某现存的目录建立关联关系,进而使此目录作为其他文件访问入口的行为

卸载:解除此关联关系的过程

挂载方法:  mount    DEVICE     MOUNT_POINT

mount   :通过查看/etc/mtab 文件显示当前已挂载的所有设备文件

mount   [-fnrsvw]  [-t vfstype]  [-o options]  device  dir

-a   实现自动挂载,使修改的配置文件立即生效(若文件中存在,仅修改部分参数,该命令无效,只能用remount 实现重新挂载)

-r   以只读方式挂载设备(只能查看文件,不允许删除)

-w   可读可写(默认)

-n    隐藏挂载(centos6  有效)   cat  /proc/mounts    即可看到隐藏挂载项

-B   或 –bind    绑定目录到指定目录(目录挂目录)

-o   acl       //挂载时添加上acl功能

async      异步模式

sync        同步模式,内存更改时,同时写磁盘

noexec       禁止程序执行(但bash 可执行)

remount       重新挂载(特定环境不能取消挂载,即可利用当前命令挂载)

       loop       挂载文件到目录上(实现文件模拟分区)

losetup   -a   //  可查看模拟分区的文件(centos6 默认有8个)

vim   /boot/grub/grun.conf         //修改kernel行的最后  max_loop=100

查看内核追踪到的已挂载的全部设备:   cat   /proc/mounts(centos6上)

卸载命令

查看挂载情况:  findmnt    MOUNT_POINT |device

查看正在访问的指定文件系统的进程

lsof    MOUNT_POINT

fuser   -v  MOUNT_POINT

终止所有正在访问指定的文件系统的进程

fuser   -km  MOUNT_POINT

卸载

umount     DEVICE

umount     MOUNT_POINT

实现挂载的永久生效:写入文件/etc/fstab

挂载文件的内容错误

  1. UUID错误,重启机器将失败,需将文件的最后内容改为0(即不检查)重启可远程后,修改为正确的UUID即可
  2. 挂载点出错,重启机器成功,只需重新挂载即可

如何将/home整个目录迁移到一个新的大的磁盘上?

  dd  /dev/zero   /dev/sdb   bs=1   count=512   //破坏分区即可删除分区

     首先备份/home

  1. fdisk 先分一个大的分区50G(分区大小不可更改)

2 .mkfs.ext4    /dev/sdb1  -L  /home 创建文件系统

  1. mkdir /mnt/home
  2. mount /dev/sdb1 /mnt/home
  3. init 1 单用户登录,确保只有自己在访问  (网络出现问题)
  4. cp -av /home/*    /mnt/home/
  5. rm –rf /home/*
  6. vim /etc/fstab

UUID=xxxxx      /home     ext4     defaults   0  0

  1. mount -a

ls    /home  /mnt/home   -l

  1. umount /mnt/home    ; rm   -rf   /mnt/home
  2. init 5

恢复原状态:

  1. mkdir /mnt/home
  2. mount /dev/sdb1    /mnt/home
  3. init 1    ;     umount     /home
  4. cp -av      /mnt/home/*     /home/
  5. 删除文件中的配置 ;   umount   /mnt/home
  6. 删除sdb1分区;( fdisk    d     1     w      )

文件中写:文件中写:挂载光盘: /dev/sr0    /mnt/cdrom  iso9660    defaults     0 0

文件夹挂载到文件夹:  /boot   /mnt/boot    none     bind   0  0

将文件挂载目录:/root/p1(设备文件名)     /mnt/p1(挂载点)  ext4    loop    0  0  (模拟文件分区挂载)

处理交换文件和分区:

交换分区是系统RAM的补充

基本设置包括:创建交换分区或者文件、使用mkswap写入特殊签名、在/etc/fstab文件中添加适当的条目、使用swapon   -a   激活交换空间

挂载交换分区:

swapon 启用

-a  激活所有的交换分区

-p   PRIORITY   指定优先级

/etc/fstab:pri=value

禁用swapoff  [option]…   [DEVICE]

SWAP的优先级

可以指定swap分区0到32767的优先级,值越大优先级越高

如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从 -1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一

先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户 指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)

优化性能:分布存放,高性能磁盘存放

swapon [OPTION]… [DEVICE]

-a:激活所有的交换分区

-p PRIORITY:指定优先级

/etc/fstab:pri=value  可写入文件,使之永久生效(禁用swap在启用即可生效)

mkswap   创建文件系统

修改fstab文件:  UUID=xxxx      挂载点    swap       defaults;pri=100   0  0

swapon   -a     //使swap分区生效

swapon     -s     查看所有生效的swap分区的信息

swapoff       禁用swap分区

扩充swap分区:(该方法需要有磁盘空间)

  1. 分区,一个2G的swap分区, 改成82类型
  2. mkswap /dev/sdb1     -L      swap_sdb1    创建文件系统
  3. 修改fstab文件: UUID=xxxx      挂载点    swap      defaults   0   0
  4. swapon -a     //使swap生效

使用文件模拟swap

dd   if=/dev/zero   of=/swapfile   bs=1024M  count=2   //生成2G 的swap文件

mkswap     /swapfile     -L    swap_file      (t    82 使用fdisk给分区指定文件系统)

修改fstab文件:  /swapfile      swap(挂载点)    swap     defaults    0   0

swapon   -a     //使swap分区生效

eject    弹出光盘

eject   -t     弹入光盘.

创建ISO文件:   cp    /dev/sr0      /data/centos7.iso

dd    /dev/sr0     /data/centos7.iso

mkisofs    -r  -o   /data/centos7.iso     /etc

合并光盘:(可以用来做yum原,不能用来启动光盘)

mkdir     /centos6

cp    /mnt/cdrom/*     /centos6/   -r  (复制两张盘内容到同一文件夹)

mkisofs    -r  -o   /data/centos7.iso     /centos6/

挂载USB介质

lsusb     查看USB设备

tail    /var/log/messages     -f    查看日志文件

查看USB设备是否识别 : lsusb

被内核探测为SCSI设备 :/dev/sdaX、/dev/sdbX、或类似的设备文件

在图形环境中自动挂载 :图标在[计算机]窗口中创建 , 挂载在/run/media//

手动挂载 : mount /dev/sdb1 /mnt

常见工具:

文件系统空间占用等信息的查看工具: df [OPTION]… [FILE]…

-H 以1000为单位

-T 文件系统类型

-h: human-readable  以1024为单位

-i:inodes instead of blocks

-P: 以Posix兼容的格式输出

查看某目录总体空间占用状态: du [OPTION]… DIR  (默认统计每个子文件夹的大小)

-h: human-readable   (加上单位,默认为K)

-s: summary  (总大小)       –max-depth   (最大深度)

工具dd:(克隆分区只是克隆MBR分区内容)

dd命令:convert and copy a file

用法: dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

bs=#:block size, 复制单元大小

count=#:复制多少个bs

skip=blocks   从开头忽略blocks个ibs大小的块

seek=blocks   从开头忽略blocks个obs大小的块

conv=conversion[,conversion…] 用指定的参数转换文件

转换参数: ascii 转换 EBCDIC 为 ASCII

ebcdic 转换 ASCII 为 EBCDIC

lcase 把大写字符转换为小写字符

ucase 把小写字符转换为大写字符

nocreat 不创建输出文件

noerror 出错时不停止

notrunc 不截短输出文件

sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字 符补齐

备份MBR: dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

破坏MBR中的bootloader: dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

例题:有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读 取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开 始的位置,替换128Bytes,实现如下:

dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc

备份:

dd if=/dev/sdx of=/dev/sdy     将本地的/dev/sdx整盘备份到/dev/sdy

dd if=/dev/sdx of=/path/to/image

将/dev/sdx全盘数据备份到指定路径的image文件 dd if=/dev/sdx | gzip >/path/to/image.gz

备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径

恢复: dd if=/path/to/image of=/dev/sdx    将备份文件恢复到指定盘

gzip -dc /path/to/image.gz | dd of=/dev/sdx    将压缩的备份文件恢复到指定盘

测试硬盘写速度    dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000

测试硬盘读速度    dd if=/root/1Gb.file bs=64k | dd of=/dev/null

修复硬盘 dd if=/dev/sda of=/dev/sda

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97027

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班