Linux磁盘管理是非常重要的一部分,我们也需要来重点看看:

  • cp -a 复制设备文件比如sda,vda等设备,保持原属性
  • mknod 文件路径 设备类型(b,c,-,d) 设备主号码 次号码
    来复制设备文件,设备主号码 次号码可以通过ll来查看,比如crw-rw-rw- 1 root root 1, 3 6月 22 23:21 /dev/null 中,1, 3就是设备主号码,次号码

备份MBR (磁盘主引导记录),通过以下命令
dd if=/dev/vda of=/data/mbr_bak bs=1 count=512

MBR是开机系统内核读取磁盘分区信息的一张表格,上面记录着非常重要的信息,如果被破坏,会导致系统崩溃,无法开机。主引导记录由三个部分组成:引导程序占用其中的前446字节,随后的64字节为DPT(Disk Partition Table,硬盘分区表),最后的两个字节“55 AA”是结束标志,表示MBR在这结束。

创建硬盘分区的方式:
parted命令
需要注意的是,parted命令等操作都是实时的,需要小心使用,一旦操作错误,没有后悔的余地。
用法:

  • parted 设备名 mklabel gpt/msdos
    设置分区类型为MBR模式或者GPT模式
    MBR模式最多四个分区,三个主分区或者最多一个扩展分区,然而GPT的分区模式可以最多分128个主分区,而且支持每个分区超过2TB。
  • parted 设备名 print
    屏幕输出设备分区信息
  • parted 设备名 mkpart primary 1 200
    分第一个主分区,为200M(默认为M)
  • parted 设备名 mkpart logical 1 200
    分第一个逻辑分区,为200M(默认为M),不用先分扩展分区,一步到位
  • parted 设备名 rm 1
    删除屏幕输出表中的分区
  • parted -l 列出分区详细信息

在分区之后需要同步分区,让系统识别,fdisk -l命令看到的是硬盘里面的内容,所以只要分好分区,这里就会显示,但是lsblk与blkid这里显示的是缓存里面的信息,所以有时候不会识别新分区,需要手动同步:
同步分区表:

  • 查看内核是否已经识别新的分区:
    cat /proc/partations
  • centos6通知内核重新读取硬盘分区表
    新增分区使用:
    partx -a 设备名
    kpartx -a 设备名 -f
    删除分区使用:
    partx -d --nr M-N 设备名
    M-N的意思是删除M到第N个分区
  • centos7通知内核重新读取硬盘分区表
    partprobe [设备名],不加设备名是重新读取所以设备

需要注意的是:fdisk -l 与 lsblk 查看的信息不一样,这就是因为一个信息在磁盘,一个在内存中
cat /proc/partitions 查看分区,在内存中
增加分区时同步才能使用 -a 选项

fdisk命令
这条命令也是分区命令,但是比较简单,这里不多叙述,正经的交互式命令,这里给出两个自动分区脚本,可以自行使用:

  • 1.管道输出重定向
    echo -e "n\np\n\n\n+1G\nw\n" | fdisk /dev/sdb 脚本分区
  • 2.多行重定向
cat > 123.txt << EOF
n
p


+1G
w
EOF
cat 123.txt | fdisk /dev/sdb

在分区完成之后需要进行文件系统的格式化:

查看内核支持的文件系统

  • ls /lib/modules/3.10.0-1127.el7.x86_64/kernel/fs

设备在Linux也有专属的编号,那就是UUID

  • uuidgen命令可以生成uuid

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

  • -t:{ext2/ext3/ext4} 指定文件系统
  • -b:{1024/2048/4096} 指定区块大小,单位为字节
  • -L:‘LABEL’ 设置文件系统的标签名称
  • -j:相当于 -t ext3
    mkfs.ext3=mkfs -t ext3=mke2fs -j=mke2fs -t ext3
    这几条命令都是等价的
  • -i: 指定"字节/inode"的比例,数据空间中每多少个字节创建一个inode,不应该小雨block的大小
  • -N:inode数,指定要建立的inode数目
  • -m:百分比值,指定给管理员保留区块的比例,默认为5%
  • -O FEATURE 启用指定特性,比如启用分区可以使用ACL权限
  • -O ^FEATURE 关闭指定特性

查看文件系统信息命令:
blkid命令:

  • blkid /dev/sdb1 查看块设备文件系统信息
  • blkid -U UUID 根据指定UUID查询设备
  • blkid -L LABEL 根据指定卷标查询设备

e2label命令:

  • e2label 设备名 卷标名 给指定设备设置卷本名

findfs命令:

  • findfs LABEL=卷标名 根据卷标名称查询设备
  • findfs UUID=UUID编号 根据UUID编号查询设备

tune2fs命令:

  • tune2fs -l /dev/sdb1 查看ext系列文件系统的特性,功能与超级快信息
  • tune2fs -L 卷标名 /dev/sdb1 修改卷标名
  • tune2fs -m n /dev/sdb1 修改预留给管理员的空间百分比
  • tune2fs -O ^has_journal /dev/sdb1 文件系统属性启用或者禁用
  • tune2fs -o /dev/sdb1 调整文件系统的默认挂载选项
    自己建立分区时候设置的ext系统没有ACL权限 需要自己加acl
    如果想增加日志功能的话 tune2fs -o has_journal /dev/sdb1
    如果想取消日志功能的话 tune2fs -o ^has_journal /dev/sdb1
  • tune2fs -U UUID编号 修改UUID编号

dumpe2fs命令

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

有这样一条小命令的结合:
查询/home是哪个分区的挂载点
blkid -U `cat /etc/fstab | sed -nr ‘s/UUID=(.*)( /home).*/\1/p’`

如果文件系统损坏可以使用以下命令来修复:

  • fsck修复 切忌不能在挂载状态下进行
  • e2fsck 修复CentOS 6 ext4类型的文件系统 -f强制检查 -y 自动加yes,切忌不能在挂载状态下进行
  • xfs_repair 修复CentOS7 xfs类型的文件系统。切忌不能在挂载状态下进行

文件系统设置好之后,便是挂载了:
mount命令:

  • -t:指定档案系统的型态,通常不必指定。mount 会自动选择正确的型态
  • -r:只读挂载
  • -w:读写挂载
  • -n:不跟新/etc/mtab文件,mount命令看不到挂载硬盘
  • -a:将 /etc/fstab 中定义的所有档案系统挂上。
  • -L:将含有特定卷标的硬盘进行挂载。
  • -U:将UUID指定挂载设备。
  • -B:–bind:绑定目录到另一个命令

直接输入mount查看内核追踪到的已挂载的所有设备
cat /proc/mounts

对于mount -o 来说有许多选项:

  • -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 模式用来将一个档案当成硬盘分割挂上系统。
  • -o exec/noexec 是否支持将文件系统上运行的应用程序
  • -o dev/nodev 是否支持在此文件系统上使用设备文件
  • -o acl 启用此文件系统的ACL功能

其中需要注意的是:
-o loop 把文件也可以当成分区使用 可以当作优盘
losetup -a 查询loop设备
也可以提前设定映射关系,比如让设备指定loop编号
Centos6中最大可以挂载8个,想增加使用mknod 创建
或者修改内核文件,/boo/.grub/grup.conf 在kernel行末尾加 max_loop=100

如果想卸载挂载的话,使用以下命令:

  • findmnt 挂载点/设备名 查看挂载情况
  • lsof 挂载点 查看正在访问指定文件系统的进程
  • fuser -v 挂载点 查看正在访问指定文件系统的进程
  • fuser -km 挂载点 强制终止正在访问指定文件系统的进程
  • umount 设备名/挂载点 卸载

这里有这样一种场景需要注意,经常使用:
迁移/home目录到一个新的分区上

首先需要 Init 1 切换到单用户执行跟换用户家目录硬盘

  • 1.备份/home/
  • 2.分一个大分区 fdisk
  • 3.创建文件系统 mkfs
  • 4.建立中转文件夹,把新设备挂载到刚刚创立的文件架上
  • 5.进入单用户,发通知
  • 6.将/home文件夹里面的所有数据全部拷贝到刚刚建立的文件夹上 cp -a 保留原属性
  • 7.删除/home目录里的全部数据
  • 7.将挂载信息写入到/etc/fstab文件中,挂载点为/home
  • 8.重新挂载 mount -a
  • 9.取消中转文件夹的挂载,并且删除文件夹

这里还有一点需要注意,对于特殊类型的文件系统,/etc/fstab文件的书写格式:

  • 文件挂载到文件夹:
    文件路径 挂载目录路径 文件系统类型 loop 0 0
  • 光盘挂载文件夹
    光盘设备名 挂载目录路径 iso9660 defaults 0 0
  • 文件夹挂载文件夹
    文件夹路径 挂载目录路径 none bind 0 0

如何建立swap分区:

  • 建立swap分区最好在固态硬盘,如果条件不允许,便使用新的硬盘,没有使用过的
  • **fdisk创立需要记住最好在外磁道建立,因为相同角速度,外磁道读取速度快,记得修改t选项82 **
  • 创建文件系统 mkswap /dev/sdb1 -L 卷标名 也可以加卷标
  • 添加/fstab表
  • swapon -a 重新挂载 不能使用mount -a
  • swapon -s 显示swap分区信息 ,有优先级 -1优先级最高 -2优先级第二
    free -h 也可以查看
    为了性能需要调整优先级,让外磁道道swap分区优先
    修改/fstab表

    UUID=c2f75fb7-c63f-49cf-a0ca-74aeb23cc33a swap swap defaults,pri=100 0 0
    加,pri=100 这个数字越大越优先
  • 修改好之后直接使用swapon -a 重新挂载已经没有作用,需要线禁用刚刚设置的swap分区
    swapoff /dev/sdb1
    然后在重新挂载
    swapon -a /dev/sdb1
    使用swapon -s查看就会发现优先级变高了
    实在没办法也可以使用文件来当swap交换分区

对于光盘的命令:

  • eject弹出光驱
  • eject -t 弹入光驱
  • cp把光盘可以制作成ISO文件
    cp /dev/cdrom /root/centos7.ios
  • dd也可以
  • mkisofs -r -o /root/etc.iso /etc 创建ISO文件
    但是mkisofs -r -o 把centos6两张光盘和在一起,这只可以用作yum源不能当成启动引导光盘
    想制造可以引导启动和yum源集于一身的可以在wiki.centos.org 搜索mkdvdiso 其中的mkdvdiso.sh脚本
    用法:

    mkdvdiso.sh 合在一起的文件夹 生成的ISO文件文件名

U盘命令:

U盘识别为sef
lsusb 查询U盘信息
信息拷贝完成之后需要执行
sync 才可以写到文件里,相当于Windows的推出U盘

不过最少需要执行三次sync才稳妥