Linux学习17-创建分区、文件系统及挂载

磁盘分区

知识点

  • 使用fdisk、gdisk及parted创建和修改MBR和GPT分区
  • mkfs、mke2fs、tune2fs格式化及修改文件系统
  • 设备挂载与配置
  • 创建和管理交换空间

分区冷知识

  • 数据盘可以只用扩展分区,但是系统硬盘不行,必须要有活动主分区
  • 磁盘分区编号,主分区和扩展分区编号删除某一个,编号不会被替换,逻辑分区的编号会被替换,所以分区的名称是不稳定的,使用设备时不建议用设备名,因为可能不固定,使用UUID,相对稳定
  • 早期CentOS系统是以柱面为单位划分磁盘的,6版本开始存在跨柱面情况,5版本不允许。
  • fdiskf分区时后面跟的设备是磁盘不是分区
  • 分区标签不会影响磁盘使用,基于严谨建议按建议给定。lvm逻辑分区为8e,raid为fd,
  • 每个分区第一个扇区是引导扇区(boot sector),存一些必要数据

1. parted命令

parted的操作都是实时生效的,小心使用

  • 格式:parted [选项]…[设备[命令[参数]…]…]
  • 选项
    1. -l 列出所有的块设备
    2. -v 显示版本
    3. -s 不提醒用户干预
    4. -h 显示帮助
    5. -a 新分区对齐
  • 命令:

    1. mklable|mktable gpt|msdos
      创建分区表
      例1:parted /dev/sdb mklabel gpt|msdos
    2. print
      打印磁盘信息
      例2:parted /dev/sdb print
    3. mkpart [primary|logical|extended] [ext4|vfat|xfs] START END
      创建分区
      例3:parted /dev/sdb mkpart primary 1 200 (默认M) 创建分区第1到第200M
    4. rm NUMBER
      删除分区NUMBER为分区编号
      例4:parted /dev/sdb rm1
  • 实验:
    克隆磁盘sda分区信息至sdb磁盘,快速创建格式相同的分区,只能是小的分区信息克隆给大的,不然会出错。

    1、$lsblk
        NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
        sda      8:0    0  200G  0 disk 
        ├─sda1   8:1    0    1G  0 part /boot
        ├─sda2   8:2    0   50G  0 part /
        ├─sda3   8:3    0   30G  0 part /data
        ├─sda4   8:4    0    1K  0 part 
        └─sda5   8:5    0    3G  0 part [SWAP]
    2、$parted /dev/sdb  print
       Number  Start  End  Size  File system  Name  Flags   <==没有分区
    3、$dd if=/dev/sda of=/dev/sdb bs=1 count=512  <==复制磁盘a前512字节到b
    4、$lsblk        <==逻辑分区的分区信息不再前512字节,所以没有5
       NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
       sda      8:0    0  200G  0 disk 
       ├─sda1   8:1    0    1G  0 part /boot
       ├─sda2   8:2    0   50G  0 part /
       ├─sda3   8:3    0   30G  0 part /data
       ├─sda4   8:4    0    1K  0 part 
       └─sda5   8:5    0    3G  0 part [SWAP]
       sdb      8:16   0  100G  0 disk 
       ├─sdb1   8:17   0    1G  0 part 
       ├─sdb2   8:18   0   50G  0 part 
       ├─sdb3   8:19   0   30G  0 part 
       └─sdb4   8:20   0    1K  0 part 
    

2. 分区工具fdisk和gdisk

这两个工具操作很类似,gdisk擅长管理GPT分区,而fdisk用来管理MBR分区,这两个命令执行后是交互式的,内部有说明数据来操作。
1. gdisk [-l] device 类fdisk的GPT分区管理工具
2. fdisk /dev/sdb MBR分区管理工具

  • 分区查看方法(以磁盘sdb为例)
    有可能会出现分区后,内存和硬盘不统一的
    1. 内存中生效的分区,系统识别
      ls /dev/sdb
      cat /proc/partitions
      lsblk
    2. 硬盘中生效的
      fdisk -l /dev/sdb
      parted /dev/sdb print
      gdisk -l /dev/sdb
  • 分区同步方法(以磁盘sdb为例)
    1. CentOS5/7中
      命令:partprobe
    2. CentOS6中
      命令:partx -a /dev/sdb同步增加分区
      命令:partx -d –nr 6-8 /dev/sdb 同步删除分区时(6-8为分区号)
    3. 重启客户端
  • gdisk [-l] device
    选项:
    -l 列出指定设备的分区,然后退出

    $gdisk /dev/sdb                 <==不加选项,进入分区交互界面
    ...                             <==省略
    1、Command (? for help):           <==可以打开子命令帮助
        p        分区列表
        t        更改分区类型  L可以列出所有标签,t后输入标签号回车就可以变更,系统默认发的ID标签,扩展分区5,swap分区82
        n        创建新分区
        d        删除分区
        v        校验分区
        u        转换单位
        w        保存
        q        不保存并退出
    2、Command (? for help): n                  <==增加分区
    3、Partition number (1-128, default 1):1    <==分区号,随意指定,习惯上从1开始
    4、First sector (34-209715166, default = 2048) or {+-}size{KMGTP}:  <==开始的扇区,这里习惯采用size写法,跳过这里直接回车
    5、Last sector (2048-209715166, default = 209715166) or {+-}size{KMGTP}:+10G   <==结束的扇区,采用size写法,在原有基础上+10G的分区,不需要数原来的基数  
    6、Hex code or GUID (L to show codes, Enter = 8300):    <==指定一个codes,L可以查看所有编号,这里默认
    7、Command (? for help): w                <==保存分区
    8、Do you want to proceed? (Y/N):         <==确认退出
    
  • fdisk -l [-u] [device…]
    选项:
    -l 列出指定设备的分区,然后退出
    -c 不按DOS格式显示分区信息,可以忽略跨柱面报警信息,7中默认
    -u 指定以扇区为计算单位,7中默认为扇区,-u=cylinders来以柱面显示

    $fdisk  /dev/sdb          <==不加选项,进入分区交互界面
    1、Command (m for help): n   <==获取帮助是m和help
    2、Partition type:           <==MBR分区会让选择分区类型
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    3、Select (default p): e      <==是可以直接分扩展分区的
    4、Partition number (1-4, default 1): 1   <==分区号,MBR只有4个主分区
    5、First sector (2048-209715199, default 2048):       <==开始的扇区号为2048,前面的扇区用于存储分区信息等系统信息
    6、Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): 10G     <==最大的扇区号为209715199,可以在范围内指定分区大小,这里采用+size
    7、Command (m for help): n        <==继续分区
        Partition type:                
        p   primary (0 primary, 1 extended, 3 free)
        l   logical (numbered from 5)   <==有了扩展分区后,多出逻辑分区选项,并且告诉你编号从5开始
    8、Select (default p): p
    9、Partition number (2-4, default 2): 2 <==告诉我们主分区编号只有2-4了
    10、First sector (20973568-209715199, default 20973568):  <==开始扇区变为上面分完10G后的扇区
    11、Last sector... (20973568-209715199, default 209715199): +10G 
    12、Command (m for help): w     <==存盘退出
    

    实验:练习脚本,编写分区脚本

    #!/bin/bash
    fdisk /dev/sdb <<EOF
    n
    p
                        <==回车,对应默认分区编号
                        <==回车,对应默认起始扇区
    +2G
    w
    EOF
    echo "partition ready"
    

3. 文件系统

  • mkfs命令
    mkfs在格式化ext系列时实际上调用的是mke2fs

    1. 格式:
      mkfs.ext4 /dev/DEVICE
      mkfs -t ext4 /dev/DEVICE
    2. 选项
      -f :强制执行
    3. 例如
      mkfs.ext3 = mkfs -t ext3
      mke2fs -j =mke2fs -t ext3
  • mke2fs 文件系统ext系列专用管理工具

    1. 格式:mke2fs [ option]…
    2. 选项:
      -t :{ext2| ext3| ext4|}
      -b:{1024|2048|4096} 指定block的大小1k、2k、4k
      -L: 设定卷标 卷标名建议为挂载点的名字
      -j :相当于-t ext3
      -i #:为数据空间中每多少个字节创建一个inode,此大小不应该小于块大小。

      PS:分区设置块大小为2048字节,而一个文件最少要占一个块,一个文件占用一个inode,所以块的数量要大于等于inode,也就是此大小不应该小于块大小
      

      -N#:指定分区中创建多少个inode
      -I: (大写i)一个inode记录占用的磁盘空间大小,128—4096
      -m#:默认5%,为管理人员预留空间占总空间的百分比

      扫描二维码关注公众号,回复: 3127501 查看本文章
      例:$mkfs.ext4 -m 1 /dev/sdb1   <==将预留值设定为1%
          5242 blocks (1.00%) reserved for the super user
      

      -o FEATURE […]:启用指定挂载选项

      例:\$tune2fs -o acl  /dev/sdb1   <==启用acl
          Default mount options:    acl
      

      -o ^FEATURE: 关闭指定挂载选项

      例:$tune2fs -o ^acl /dev/sdb1         <==关闭acl
          Default mount options:    (none)
      
  • tune2fs:重新设定ext系列文件系统可调整参数的值

    1. 选项:
      -l :查看指定文件系统超级块信息;super block
      -L :修改卷标
      -m#:修改预留给管理员的空间百分比
      -j :将ext2升级为ext3
      -o :文件系统属性启用或禁用,-O^has_journal
      -o :调整文件系统的默认挂载选项,-o^acl
      -U :修改UUID号

           例如:$tune2fs -U `uuidgen` /dev/sdb1
           #:利用uuidgen命令生成UUID,然后更改                       
      

      -c :修改最大挂载次数
      -C:修改当前挂载次数
      -i[d|m|w] :修改检测时间周期

      $tune2fs -l /dev/sdb1
      tune2fs 1.41.12 (17-May-2010)
      Filesystem volume name:     <==文件系统名称,即-L设定的卷标
      Last mounted on:           <==上次挂载点
      Filesystem UUID:           <==UUID装置定义码
      Filesystem magic number:  0xEF53
      Filesystem revision #:    1 (dynamic)
      Filesystem features:      <==文件系统的特性,比如日志
      Filesystem flags:         signed_directory_hash 
      Default mount options:    (none)   <==预设在挂载时会主动加上的挂载参数
      Filesystem state:         clean        <==文件系统状态,fsck检测结果
      Errors behavior:          Continue
      Filesystem OS type:       Linux
      Inode count:              655776         <==inode的总数
      Block count:              2622603        <==block的总数
      Reserved block count:     131130     <==保留的block总数
      Free blocks:              2575671          <==可用block的总数
      Free inodes:              655765           <==可用inodes的总数
      First block:              0
      Block size:               4096             <==块大小
      Fragment size:            4096
      Reserved GDT blocks:      640
      Blocks per group:         32768
      Fragments per group:      32768
      Inodes per group:         8096
      Inode blocks per group:   506
      Filesystem created:       Sat Aug 18 23:05:51 2018
      Last mount time:          n/a
      Last write time:          Sat Aug 18 23:05:52 2018
      Mount count:              0       <==挂载次数
      Maximum mount count:      20    <==最大挂载次数 ,当挂载次数达到20次,会触发文件系统检查,即触发fsck
      Last checked:             Sat Aug 18 23:05:51 2018
      Check interval:           15552000 (6 months)   <==当文件系统使用时间达到6个月,会触发文件系统检查
      Next check after:         Thu Feb 14 23:05:51 2019
      Reserved blocks uid:      0 (user root)
      Reserved blocks gid:      0 (group root)
      First inode:              11
      Inode size:           256            <==indoe的容量大小
      Required extra isize:     28
      Desired extra isize:      28
      Default directory hash:   half_md4
      Directory Hash Seed:      25b5a71f-97f4-465b-9eae-1c8e957cdcde
      
  • 文件系统ext系列检测和修复

    1. 命令fsck|e2fsck
      fsck实际上调用的是e2fsck
      可以标记物理损坏,但不能修复
      ext系列的修复工具,不能修复xfs
    2. 格式
      fsck.FS_TYPE device
      fsck -t FS_TYPE device

      例:$fsck.ext4 /dev/sdb1        
          $fsck /dev/sdb1         <==会自动判断文件系统类型
      
    3. 选项
      -p:自动修复错误
      -r:交互式修复错误
      -y: 文件系统修复时,自动回答yes
      -f:强制修复
    4. 注意事项
      文件系统修复时,一定是在取消挂载情况下
      输入文件系统时,一定要与分区系统文件类型相同
  • 文件系统xfs系列检测和修复

    1. 格式
      xfs_repair [options] device
  • 文件系统标签

    1. blkid 块设备属性信息查看
      格式:
      blkid [option]…[device]
      选项:
      -U :根据指定的UUID来查找对应设备
      -L :根据指定的卷标(LABEL)来查找对应的设备
    2. e2label 管理ext系列文件系统的卷标
      格式:
      e2label device [label]
      例如:为sdb1分区设置卷标为/data/sdb1
      $e2label /dev/sdb1 /data/sdb1
    3. findfs 查找分区
      格式:
      findfs [options] LABEL=”label”
      findfs [options] UUID=”uuid”
      例如:查找卷标/data/sdb1属于哪个分区
      $findfs LABEL=/data/sdb1

    4. mke2fs和tune2fs
      格式:
      mke2fs -L volume-label device
      tune2fs -L volume_label device

      例:$mke2fs -L  /mount/sdb2 /dev/sdb   <==建立卷标
          $e2label /dev/sdb2                <==查看卷标
          /mount/sdb2
          $tune2fs -L /data/sdb2 /dev/sdb2  <==修改卷标
          $e2label /dev/sdb2                <==查看卷标
          /data/sdb2
      

4. 设备挂载

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

  • 当挂载点的文件夹最好是空的,不是空的文件夹,原有数据会被设备顶掉隐藏,不能访问,直到取消挂载
  • 一个设备可以同时挂载在多个文件上,这些文件夹看到的数据是一样的

4.1挂载相关命令

  • mount
    格式:mount DEVICE MOUNT_POINT

    1. device:指明要挂载的设备
      • 设备文件:例如/dev/sda5
      • LABEL(卷标):例如 LABEL=”/data/sdb1”
      • UUID 推荐使用,相对稳定 UUID=” “
      • 伪文件系统名称:proc,sysfs,devtmpfs,configfs
    2. 示例:

      例1:在不影响用户情况下,更改挂载读写类型,可以不取消挂载。
          $mount  -o   remount,rw   /mnt/sdb1  <==将设备改为读写
          $mount  -o   remount,ro   /mnt/sdb1  <==将设备改为只读
      
      例2:关掉读时间可以使用
          $mount  -o   remount,notime   /mnt/sdb1
      
      例3:使用mount命令查看挂载情况
          /dev/sdb1 on /data/sdb1 type ext4 (rw,relatime,seclabel,data=ordered) 
          这里的relatime意思是延迟更新,比如1天后更新,或者读时间滞后写时间激活
      
      例4:启用acl功能
           $mount  -o   remount,acl   /mnt/sdb1
      
      例5:使用loop设备将文件挂载到文件夹中
      1、dd if=/dev/zero  of=/data/p1  bs=1M  count=100    建一个100兆的文件
      2、mkfs.ext4  /data/p1         给文件写上文件系统,可以用blkid [路径]查看信息
      3、mount  -o  loop  /data/p1  /mnt/p1    CentOS6中需要加-o loop才能挂载,CentOS7不用,直接mount挂载
      4、CentOS6中默认有0-7个loop设备,更改文件/boot/grub/grub.conf在kernel一行,末尾加上max_loop=#,#可以为任何数,重启电脑。7中没有限制
      5、也可以mknod  /dev/loop100  b 7 100来创建loop文件
        mknod创建设备文件命令,b为设备文件代号  7为设备主编号,100为在主编号设备中的第几个
      
    3. 选项:

选项 功能
-t vsftype 指定要挂载的设备上的文件系统类型,一般不用,系统会判定
-r readonly只读挂载,挂载上去不能删不能写,显示为ro,更换挂载读写方式需要先取消挂载
-w read and write,读写挂载 默认的
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L’卷标’ 以卷标指定挂载设备
-U‘UUID’ 以UUID指定要挂载的设备
-n 不更新/etc/mtab,可隐藏设备,/proc/mount文件可看,在centos7中不起作用
-B, –bind 绑定目录到另一个目录上,挂载后节点编号不变,链接数不变,df不能查看,mount可以查看

选择-n在centos7中不起作用,是因为/proc/mounts、/etc/mtab在7中都是软连接,指向self/mount

-o options (挂载文件系统的选项),多个选项使用逗号分隔
async 异步模式,修改多次后一次写入
sync 同步模式,内存更改时,同时写磁盘
atime/noatime 取消或开启读时间,包含目录和文件
diratime/nodiratime 开启或关闭读时间,目录的访问时间戳
suto/noauto 是否支持自动挂载,也就是,是否支持-a选项
exec/noexec 是否支持将文件系统上运行应用程序
dev/nodev 是否支持在此文件系统上使用设备文件,如/dev/zero
suid/nosuid 是否支持suid和sgid权限
remount 重新挂载,可以不用取消挂载修改设置
user/nouser 是否允许普通用户挂载此设备
ro;rw 只读;读写
acl 启用此文件系统上的acl功能,centos6后加的设备没有acl功能,centos7都有
loop 使用loop设备,挂载iso文件或者带文件系统的文件
defaults 相当于rw,suid,dev,exex,auto,nouser,async,挂载默认的选项
  • 查看挂载情况
    /etc/mtab文件显示,实时更新
    mount

4.2 取消挂载

  1. 查看挂载情况,判断某个目录是否为挂载点
    findmnt MOUNT_POINT|device
  2. 查看正在访问指定文件系统的进程
    lsof MOUNT_POINT
  3. 查看正在使用挂载点的用户
    fuser -v MOUNT_POINT
  4. 终止所有正在访问指定的文件系统的进程,有人在使用挂载设备,是不可以卸载的,这时候可以把所有访问者都踢出去,有下面命令
    fuser -km MOUNT_POINT
  5. 卸载
    umount DEVICE
    umount MOUNT_POINT

4.3文件挂载配置文件

  • 配置文件
    /etc/fstab每行定义一个要挂载的文件

    UUID=******   /data   xfs   defaults    0  0        <==文件格式
          1         2      3        4       5  6        <==解释编号
    
  • 文件设置解释

    1. 要挂载的设备或伪文件系统
      设备文件:如/dav/sdb1
      LABEL:LABEL=””
      UUID:UUID=“” <==推荐使用
      伪文件系统名称:proc,sysfs
    2. 挂载点
    3. 文件系统类型:ext3,xfs,nfs,none(目录),
    4. 挂载选项:defaults,acl,目录(bind),文件(loop)
    5. 转储频率:0:不做备份 1:每天转储 2:每隔一天转储,目前没意义
    6. fsck检查的文件系统的顺序:允许检测顺序1、2、3… 不检测为0
      建议写0,即使挂载设备出错,也能启动系统,不然出错就会影响启动
  • 配置文件出错

    1. 挂载设备出错,系统会启动不了,
      6中设置了自检,如果设备出错就会启动不了,不自检还是可以启动
      7中和自检没有关系,设备出错就会启动不了
    2. 挂载点出错,会报错,不影响启动
    3. 挂载设备名称建议选择UUID,不要加引号,可能导致错误
  • 解决方案

    1. 在救援模式修改挂载设备为不自检,或者将设备参数修正,可以修复;7中修改自检不行,需要修改参数,或者将设备注释掉。
    2. CentOS6系统故障,救援模式下会默认挂载只读状态的根目录,需要改为读写状态,mount –o rw,remount /
  • 实验:将/home迁移到一个独立分区中,根目录不能这样迁移,可以救援模式迁

    1. 建立新的硬盘分区,并格式文件系统
    2. 挂载分区到目录中
    3. init 1切换到单用户模式
    4. cp –av /home/* /挂载点
    5. 将挂载点写入文件fsdab中
    6. mount -a 载入挂载
    7. 确定数据没有问题,取消挂载,删除/home
    8. 再次挂载

拆除带swap的硬盘
1、swapoff device卸载swap
2、删除配置文件相关记录
3、fdisk device删除分区

4.4 处理交换文件和分区

交换分区是系统RAM的补充(swap),作用同虚拟内存

  • swap分区大小
    如果内存4G以内,设置为内存的1.5-2倍
    如果内存大于4G,设置为8G就够用
  • 建立swap文件系统
    1. mkswap device
  • 启用交换分区

    1. 格式:
      swapon[OPTION]…[DEVICE]
    2. 选项:
      -a:激活所有的交换分区
      -s:查看swap分区有那几个 和/proc/swaps文件记录相同
      -p :PRIORITY临时指定优先级,重启 失效
  • 禁用:swapoff [OPTION]…[DEVICE]

  • SWAP的优先级 配置文件中特征(第5项)修改为pri=#

    1. 可以指定swap分区0到32767的优先级,值越大优先级越高
    2. 如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一
    3. 先添加的swap的优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)
  • 示例:增加分区或文件充当swap功能

    1. 分出一个独立分区,机械磁盘最好私用外道的分区,速度快,优先选择固态磁盘
      $fdisk /dev/sdb1 <==记得设置磁盘ID
    2. mkswap将分区格式化为swap文件系统
      $mkswap /dev/sdb1
    3. 写入fstab文件中,格式为虚拟内存

      $vim /etc/fstab
      UUID=...   swap    swap    defaults        0 0     <==默认优先级
      UUID=...   swap    swap      pri=10        0 0     <==指定优先级,放在这里方便对比
      
    4. swapon -a 激活分区

    5. 根据磁盘性能,修改优先级

      $swapon -s              <==查看生效的swap
      Filename              Type      Size    Used   Priority
      /dev/sda5            partition  3145724 520     -1
      /dev/sdb1            partition  5242876   0     -2
      #Priority为优先级
      
    6. 修改后先禁用,再激活,生效

      $vim /etc/fstab                             <==修改配置优先级
      $swapoff /dev/sdb1                          <==取消挂载
      $swapon -s
      Filename        Type        Size       Used     Priority
      /dev/sda5       partition   3145724     32      -1
      $swapon -a                                    <==挂载
      $swapon -s                                    <==生效
      Filename        Type        Size    Used    Priority
      /dev/sda5     partition   3145724   32         -1
      /dev/sdb1     partition    5242876   0         10
      

4.5 移动介质

按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB等等)
挂载点通常在/media或/mut下

  • 光盘

    1. 开机自动挂载光盘至目录/mnt/cdrom下

      dev/cdrom    /mnt/cdrom   iso9660   defaults    0  0        <==配置文件格式
      
    2. 制作或下载.iso文件挂载
      • cp /dev/sr0 /data/centos7.iso将光盘制作成iso文件,或者网络上下载
      • mkdir /mnt/iso 建立文件夹
      • mount /data/centos7.iso /mnt/iso 将光盘挂载到文件夹上,yum源就是挂载到/var/www/html/相应目录下
    3. 光驱控制
      • eject -t 弹出光驱
      • eject 收回光驱
    4. 将目录制作成.iso文件,以/etc/目录为例
      mkisofs -r -o etc.iso /etc/
    5. 刻录光盘
      wodim -v -eject centos.iso
  • USB设备

    1. 查看USB设备是否识别
      lsusb 或者cat /var/log/messages
    2. 设备名
      /dev/sdaX /dev/sdbX 或类似的设备文件

5 磁盘管理其他命令

  • df [-ahikHTm] [目录或文件名]
    1. 应用:列出文件系统的整体磁盘使用量,只能看到被创建好文件系统并且挂载在目录下,命令中的块固定为1k,与分区命令里的块不同
    2. 选项:
      -a :列出所有文件系统,包括系统持有的/proc等文件系统
      -h :以易读方式自动显示
      -H:以1000为单位,不是1024
      -T:显示文件系统类型
      -i :以inode的数量显示
      -k:以K为单位
      -m:以M为单位
  • du [-ahskm] 目录或文件名

    1. 应用:评估文件系统的磁盘使用量
    2. 选项:
      - a:列出所有的文件与目录容量,默认统计目录下容量
      -h:易读显示
      -s:列出总量,不显示每个目录容量
      -S:不包括子目录下的总计
      -k : 以K为单位
      -m:以M为单位
      –max-depth :指定搜索深度

      例如:统计etc下的一级目录
      $du --max-depth=1 /etc
      

dd工具

  • dd命令:convert and copy a file用来转换和复制文件

    1. 用法:默认行为将输入的信息打印到屏幕

         dd   if=/PATH/FROM/SRC    of=/PATH/TO/DEST      bs=#      count=#:
                 从一个文件读           到目标文件      复制单元大小   多少个bs 
      
    2. 选项1:

      • of=file: 写到所命名的文件而不是都标准输出
      • if=file :从所命名文件读取而不是从标准输入
      • bs=size: 读和写一样大小的时候使用
      • ibs=size 一次读size个byte
      • obs=size 一次写size个byte
      • cbs=size 一次转换size个byte
      • skip=blocks 从开头忽略blocks个ibs大小的块
      • seek=blocks 从开头忽略blocks个obs大小的块
      • count=n 只拷贝n个记录
    3. 选项2:
      conv=conversion[,conversion…]用指定的参数转换文件

      • conversion转换参数:
      • ascii转换EBCDIC为ASCII
      • ebcdic转换ASCII为EBCDIC
      • lcase把大写字符转换为小写字符
      • ucase把小写字符转换为大写字符

        示例:将文件f1 内容转换为大写
        $cat f1
        abcdef
        $dd if=f1 of=f3 conv=ucase
        $cat f3
        ABCDEF
        
      • noerror出错时不停止
      • nocreat不创建输出文件
      • notrunc不截短输出文件 保留多出来的部分

        示例:$echo abcdef>f1
              $echo 123456789 >f2
              $dd if=f1 of=f2 bs=1 count=2 skip=2 seek=3      <==不加notrunc
              $cat f2
                123cd                                        <==将多出的部分删除也就是截短
              $dd if=f1 of=f2 bs=1 count=2 skip=2 seek=3 conv=notrunc
              $cat  f2
                123cd6789
        

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

  • 备份

    1. 将本地的/dev/sdx整盘备份到/dev/sdy
      dd if=/dev/sdx of=/dev/sdy
    2. 将/dev/sdx全盘数据备份到指定路径的image文件
      dd if=/dev/sdx of=/path/to/image
    3. 备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径
      dd if=/dev/sdx|gzip>/path/to/image.gz
  • 恢复

    1. 将备份文件恢复到指定盘
      dd if=/path/to/image of=/dev/sdx
    2. 将压缩的备份文件恢复到指定盘
      gzip -dc /path/to/image.gz|dd of=/dev/sdx
  • 其它应用

    1. 将内存里的数据拷贝到root目录下的mem.bin文件
      dd if=/dev/mem of=/root/mem.bin bs=1024
    2. 销毁磁盘数据,利用随机数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行
      dd if=/dev/urandom of=/dev/sda1
    3. 拷贝光盘数据到root文件夹下,并保存为cd.iso文件
      dd if=/dev/cdrom of=/root/cd.iso

    4. 得到最恰当的block size,通过比较dd指令输出中命令的执行时间,即可确定系统最佳的block size大小
      dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
      dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
      dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

    5. 测试硬盘写速度
      dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
      测试硬盘读速度
      dd if=/root/1Gb.file bs=64k|dd of=/dev/null

    6. 修复硬盘
      dd if=/dev/sda of=/dev/sda
      当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生,且安全高效

猜你喜欢

转载自blog.csdn.net/free050463/article/details/81950396
今日推荐