HOME
BLOG
TIME
FRIENDS
SAY TO ME
MOOD
TRAVELING
Linux 磁盘管理
2020/08/02 2.9k 11 分钟 点击

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才稳妥==**
Linux学习笔记