码迷,mamicode.com
首页 > 其他好文 > 详细

关于 磁盘、文件系统管理

时间:2016-08-29 20:49:11      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:程序   空间   隔离   修复   如何   磁盘文件系统   

               磁盘、文件系统管理
              

1  设备识别
2  设备分区
3  创建文件系统
4  标记文件系统
5  在/etc/fstab文件中创建条目
6  挂载新的文件系统
7  为什么是分区?
8  优化I/O性能
9  实现磁盘空间配额限制
10 提高修复速度
11 隔离系统和程序
12 安装多个OS
13 采用不同文件系统

两种分区方式MBR和GPT
MBR: Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
如何分区:按柱面
0磁道0扇区:512bytes
446bytes: boot loader
64bytes:分区表
16bytes: 标识一个分区
2bytes: 55AA
4个主分区;3主分区+1扩展(N个逻辑分区)
GPT:GUID(Globals Unique Identifiers)partition table
支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)

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

UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动
              
列出块设备:
           lsblk
           ls /dev/sd*
           cat /proc/partitions

创建分区使用:
fdisk创建MBR分区,也支持GPT,对于一块硬盘,最多只能管理15分区
gdisk创建GPT分区, 跟fdisk 差不多
GNU parted高级分区操作(创建、复制、调整大小等等)
        

查看磁盘分区情况:
[root@Compro ~]# fdisk -l /dev/sda  
[root@Compro ~]# fdisk /dev/sdb
gfisk /dev/sdb 类fdisk 的GPT分区工具
fdisk -l [-u] [device...]
子命令:
      p 分区列表
      t 更改分区类型
      n 创建新分区
      d 删除分区
      w 保存并退出
      q 不保存并退出
     
     
扫描磁盘
新添加硬盘加载到当前系统:
~]# echo  "- - -"> /sys/class/scsi_host/host2/scan
查看块设备:
~]# lsblk 
查看mbr:
~]# hexdump -C -n 512 /dev/sda  查看磁盘二进制字节
备份mbr :         
[root@Compro ~]# dd if=/dev/sda of=/testdir/mbrbak bs=1 count=512
                  if读取文件路径 of 输出文件路径到哪个地方
记录了512+0 的读入
记录了512+0 的写出
512字节(512 B)已复制,0.0104854 秒,48.8 kB/秒

查看是否成功:
[root@Compro ~]# hexdump -C -v /testdir/mbrbak

 

通知内核重新读取硬盘分区表
新增分区用:
partx -a /dev/sdb
kpartx -a /dev/sdb -f: force

删除分区用:
centOS6: -n  --nr <n:m> 指定分区范围(例如:--nr 2:4)
partx -d /dev/sdb
CentOS7: 使用partprobe
~]# partprobe /dev/sdb

parted的操作都是实时生效,小心使用
用法:parted [选项]... [设备[命令[参数]...]...]
parted /dev/sdbmklabelgpt|msdos          [root@Compro ~]# parted /dev/sdb mklabel gpt   更改磁盘标签类型
parted /dev/sdbprint
parted /dev/sdbmkpartprimary 1 200 (默认M)
parted /dev/sdbrm1            [root@Compro ~]# parted /dev/sdb rm 1    删除1分区
parted -l /dev/sdbrm1         在所有块设备列表分区布局

 

文件系统分类:
常用的linux文件系统:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap
交换文件系统:swap
网络文件系统:nfs , smbfs
集群文件系统:GFS , OCFS
分布式文件系统:ceph,moosefs,mogilefs,glusterfs,lunster
未经处理或者未经格式化产生的文件系统: RAW
光盘文件系统:isso96600

根据其是否支持日志功能还可分为:
 日志型文件系统:ext3,etx4,xfs
 非日至类型文件系统:ext2,vfat
 
 文件系统的组成部分:
  内核中的模块:ext4,xfs,vfat
  用户空间的管理工具:mkfs.ext4 , mkfs.xfs , mkfs.vfat
  linux的虚拟文件系统:VFS
  查看当前支持的文件系统: cat/proc/filesystems

创建文件系统
mkfs命令   # mkfs. 类型 /dev/sda
用法:
     mkfs [选项] [-t <类型>] [文件系统选项] <设备> [<大小>]
                   ext4
                   xfs
                   btrfs
                   vfat
                   选项:
 -t, --type=<类型>  文件系统类型;若不指定,将使用 ext2
     fs-options     实际文件系统构建程序的参数
     <设备>         要使用设备的路径
     <大小>         要使用设备上的块数
[root@Compro ~]# mkfs -t ext4 /dev/sdb1
[root@Compro ~]# mkfs -L 类型 /dev/sdb1    设定卷标
              

mke2fs ext系列文件系统专用 管理工具
[root@Compro ~]# mke2fs -t ext2 /dev/sdb1  {ext|2|ext3|ext4}
[root@Compro ~]# mke2fs -b 1024 /dev/sdb1  {1024|2048|4096}      指定块大小
[root@Compro ~]# mke2fs -L /mnt/sdb1 /dev/sdb 设定卷标类型 一般设定挂载点为卷标名
[root@Compro ~]# mke2fs -j /dev/sdb1     相当于 -t ext3 
[root@Compro ~]# mke2fs -i # /dev/sdb1   #为数字;为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
[root@Compro ~]# mke2fs -N # /dev/sdb1   #为数字;为数据空间创建个多少个inode节点表
[root@Compro ~]# mke2fs -I 128 /dev/sdb   修改inode记录大小128---4096 
[root@Compro ~]# mke2fs -m # /dev/sdb1   #为数字; 默认5%,为管理人员预留空间占总空间的百分比
[root@Compro ~]# mke2fs -O has_journal /dev/sdb1    启用指定特性   启用日志功能,也可以启动别的特性
[root@Compro ~]# mke2fs -O ^has_journal /dev/sdb1   关闭指定特性   关闭了日志功能 ,也可以关闭其它特性

 
指向设备的另一种方法;与设备无关
[root@Compro ~]# blkid       块设备属性信息查看  
[root@Compro ~]# blkid [选项]... [设备]
[root@Compro ~]# blkid -U UUID: 根据指定的UUID来查找对应的设备
[root@Compro ~]# blkid -L ext3  根据指定的标签来查找对应的设备

[root@Compro ~]# e2label /dev/sdb1 ext2 :管理ext系列文件系统的标签 
            格式 e2label DEVICE [LABEL]

tune2fs:重新设定ext系列文件系统可调整参数的值
[root@Compro ~]# tune2fs -l /dev/sdb1   查看指定文件系统超级块信息;super block
[root@Compro ~]# tune2fs -l /dev/sdb1   修改卷标
[root@Compro ~]# tune2fs -m # /dev/sdb1  #为数字;修改预留给管理员的空间百分比
[root@Compro ~]# tune2fs -j /dev/sdb1   将ext2升级为ext3
[root@Compro ~]# tune2fs -O has_journal /dev/sdb1 文件系统属性启用或禁用 启用日志功能,也可以启动别的特性  
[root@Compro ~]# tune2fs -O ^has_journal /dev/sdb1   关闭指定特性   关闭了日志功能 ,也可以关闭其它特性
[root@Compro ~]# tune2fs -o acl /dev/sdv1   调整文件系统的默认挂载选项
[root@Compro ~]# tune2fs -o ^acl /dev/sdv1     
[root@Compro ~]# tune2fs -U UUID    修改UUID号
[root@Compro ~]# uuidgen            随机生成UUID
[root@Compro ~]# dumpe2fs -h /dev/sdb1 查看超级块信息(分组信息),分区用分组管理  同tune2fs -l 一样

常发生于死机或者非正常关机之后
挂载为文件系统标记为“dirty”
fsck: File System Check  文件系统校验
[root@Compro ~]# fsck.文件类型
[root@Compro ~]# fsck /dev/sdb1
[root@Compro ~]# fsck -y /dev/sdb1   自动回答为yes
[root@Compro ~]# fsck -t 文件类型
[root@Compro ~]# fsck -a /dev/sdb1自动修复错误
[root@Compro ~]# fsck -r /dev/sdb1 交互式修复错误
注意: 文件类型一定要与分区上已经文件类型相同;
e2fsck:ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复 


文件系统的挂载
挂载mount
挂载:将额外文件系统于根文件系统某现存的目录建立起关联关系,
      进而使得此目录作为其他文件访问入口的行为
卸载:解除此关联关系的过程
把设备关联挂载点:mount Point
卸载时:可使用设备,也可以使用挂载点 umount
挂载点下原有文件在挂载完成后会被临时隐藏
挂载点目录一般为空

挂载工具mount的使用
mount 设备 安装指向
设备:所奥挂载的磁盘分区
安装指向挂载点:另一个文件系统的访问入口
mount 通过查看/etc/mtab文件显示当前已经挂载的所有设备
固定挂载点:/mnt,/media
mount [选项]...[-t 文件类型] [-o 选项]设备 挂载点
挂载点需要具备以下两点:1事先存在 2使用空闲目录
进程正在使用中的设备无法被卸载
[root@Compro ~]# mount /dev/sdb1 /testdir/     将磁盘挂载到testdir目录下
常用挂载选项:
      -t 指定文件系统类型
      -r 只读挂载
      -w 读写挂载
      -L 以卷标方式指定设备,
      -U 以UUID的方式指定设备,例如 mount -U UUID 挂载点
      -a 自动挂载所有(/etc/fstab文件中定义的)的支持自动挂载设备
      -n 挂载时,不更新/etc/mtab文件
      -B 绑定目录到另一个目录上
      cat /proc/mounts  查看内核追踪到的已经挂载的所有设备
伪文件系统名称:proc, sysfs, devtmpfs, configfs

        -o 选项:(挂载文件系统的选项)
        async:异步模式
        sync:同步模式,内存更改时,同时写磁盘
        atime/noatime:包含目录和文件
        diratime/nodiratime:目录的访问时间戳
        auto/noauto:是否支持自动挂载,是否支持-a选项
        exec/noexec:是否支持将文件系统上运行应用程序
        dev/nodev:是否支持在此文件系统上使用设备文件
        suid/nosuid:不否支持suid和sgid权限
        remount:重新挂载
        ro:只读
        rw:读写
        user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载
        acl:启用此文件系统上的acl功能
注意:上述选项可多个同时使用,彼此之间使用逗号分隔
      默认挂载选项:rw, suid, dev, exec, auto, nouser, async

查看挂载情况:
[root@Compro ~]# findmnt /dev/sda1
查看正在访问指定文件系统的进程:
[root@Compro ~]# lsof /dev
[root@Compro ~]# fuser -v /dev/
终止所有在正访问指定的文件系统的进程:
[root@Compro ~]# fuser -km /dev/    善用此命令
卸载:
umount 设备
umount 指明安装路径

 

设备自动挂载
配置文件系统:/etc/fstab
被mount、fsck和其它程序使用
系统重启是保留文件系统卷标
可以在设备栏使用文件系统卷标
使用mount -a 命令挂载/etc/fstab中的所有文件系统

/etc/fstab每行定义一个要挂载的文件系统;
要挂载的设备或伪文件系统
挂载点
文件系统类型
挂载选项
转储频率
自检次序
要挂载的设备或伪文件系统:
设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc, sysfs)
挂载选项:defaults
转储频率:
         0:不做备份
         1:每天转储
         2:每隔一天转储
自检次序:
         0:不自检
         1:首先自检;一般只有rootfs才用1
处理交换文件和分区
交换分区是系统RAM的补充
基本设置包括:
创建交换分区或者文件
使用mkswap写入特殊签名
在/etc/fstab文件中添加适当的条目
使用swapon -a 激活交换空间

挂载交换分区
启用:swapon
swapon [OPTION]... [DEVICE]
         -a:激活所有的交换分区;
         -p PRIORITY:指定优先级
/etc/fstab:pri=value
禁用:swapoff [OPTION]... [DEVICE]

SWAP的优先级
用户可以给某个swap指定一个0到32767的优先级
如果用户没有指定,那么核心会自动给swap指定一个优
先级,这个优先级从-1开始,每加入一个新的没有用户
指定优先级的swap,会给这个优先级减一。
先添加的swap的缺省优先级比较高,除非用户自己指定
一个优先级,而用户指定的优先级(是正数)永远高于核心
缺省指定的优先级(是负数)。
优化性能:分布存放,高性能磁盘存放

移动介质
挂载意味着使外来的文件系统看起来如同是主目录树的一部分
访问前、介质必须被挂载
摘除时,介质必须被卸载
按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软
盘、USB等等)
挂载点通常在/media 或/mnt下

使用光盘
在图形环境下自动启动挂载/run/media/<user>/<label>
否则就必须被手工挂载
mount /dev/cdrom/mnt/
eject命令卸载或弹出磁盘
创建ISO文件
cp/dev/cdrom/root/centos7.iso
mkisofs -r -o /root/etc.iso /etc
刻录光盘
wodim–v –eject centos.iso

挂载USB介质
被内核探测为SCSI设备
/dev/sdaX、/dev/sdbX、或类似的设备文件
手动挂载
mount /dev/sdb1 /mnt

常见工具
内存空间使用状态:
                free [OPTION]
                       -m: 以MB为单位
                       -g: 以GB为单位
文件系统空间占用等信息的查看工具:
            df [OPTION]... [FILE]...
               -H 以1000为单位
             -T 文件系统类型
                -h: human-readable
                       -i:inodesinstead of blocks
                       -P: 以Posix兼容的格式输出
查看某目录总体空间占用状态:
          du [OPTION]... DIR
             -h: human-readable
              -s: summary
工具dd
dd命令:convert and copy a file
用法:
     ddif=/PATH/FROM/SRC of=/PATH/TO/DEST
       bs=#:block size, 复制单元大小
    count=#:复制多少个bs
       of=file写到所命名的文件而不是到标准输出
       if=file从所命名文件读取而不是从标准输入
       bs=size指定块大小(既是是ibs也是obs)
      ibs=size一次读size个byte
      obs=size 一次写size个byte
      cbs=size 一次转化size个byte
     skip=blocks从开头忽略blocks个ibs大小的块
     seek=blocks从开头忽略blocks个obs大小的块
    count=n只拷贝n个记录
     conv=conversion[,conversion...] 用指定的参数转换文件。
转换参数:
        ascii 转换EBCDIC 为ASCII
        ebcdic 转换ASCII 为EBCDIC
        block 转换为长度为cbs 的记录,不足部分用空格填充。
        unblock 替代cbs长度的每一行尾的空格为新行
        lcase 把大写字符转换为小写字符
        ucase 把小写字符转换为大写字符
        swab 交换输入的每对字节
        noerror 出错时不停止
        notrunc 不截短输出文件
        sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
磁盘拷贝:
         ddif=/dev/sdaof=/dev/sdb
备份MBR:
        ddif=/dev/sdaof=/tmp/mbr.bakbs=512 count=1
破坏MBR中的bootloader:
        ddif=/dev/zero of=/dev/sdabs=64 count=1 seek=446
      
有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts 。
又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,请问如何实现?
 #ddif=fileAof=fileBbs=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/mem of=/root/mem.bin bs=1024 
      将内存里的数据拷贝到root目录下的mem.bin文件
从光盘拷贝iso镜像
      dd if=/dev/cdrom of=/root/cd.iso
      拷贝光盘数据到root文件夹下,并保存为cd.iso文件
销毁磁盘数据
      dd if=/dev/urandom of=/dev/sda1
      利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。
      执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行。


得到最恰当的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
    dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小

测试硬盘读写速度
    dd if=/root/1Gb.file bs=64k | dd of=/dev/null
    dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度

 

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

 


 

本文出自 “小马哥Linux系统运维” 博客,转载请与作者联系!

关于 磁盘、文件系统管理

标签:程序   空间   隔离   修复   如何   磁盘文件系统   

原文地址:http://xiaomag.blog.51cto.com/11842517/1844050

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!