磁盘管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了磁盘管理相关的知识,希望对你有一定的参考价值。

  数据的存储总是需要一个载体,这个载体就是我们通常说的硬盘,硬盘它的构造就是一个不停在转的磁块,一个不停转的磁块是怎么存储数据的,为什么这个磁块需要不停的转动,并且我们日常购买磁盘,都希望磁盘的转速越快越好,这一切都取决于磁盘的存储数据的原理。目前市面上稍微高端一点的电脑全部都使用SSD,这种新磁盘为什么拥有那么好的性能。

一 磁盘

  磁盘存储数据是把一个可以存储磁属性的东西赋予正负属性,多个正负组合在一起代表一个数据。工业中把磁盘分成如下图的样子

技术分享

  上图就是工业上划分磁盘的标准,首先把磁盘划分为一圈圈的磁道,然后把磁道分为一个个扇区,每个扇区存储512B数据。当今的磁盘一般不是一个盘片的硬盘,一般都是多个盘片,并且正反盘面都存储数据。

技术分享

  上图就是一个三盘片的磁盘,并且有六个磁头,磁头统一固定在一个可以转动的磁臂上。前面我们把磁盘分为一个个磁道,就是通过磁臂转动选择磁道。当读数据的时候,磁臂转到对应的磁道,然后确定在哪个磁头上的哪个扇区,这时就需要看磁盘的转速了,磁盘的转动速度越快,寻找扇区的速度越快。一个磁盘可以存储数据的大小=磁头数*磁道数*扇区数*512B

二 磁盘使用

  磁盘使用分为两个部分,一是磁盘管理,分区类型有mbrgpt;二是文件系统管理,主要是在磁盘原本的存储结构上进一步划分,使得操作系统可以高效的利用磁盘。

1 磁盘分区类型

磁盘使用的时候总是需要了解磁盘信息,有时还需要把磁盘分为多个块使用,分块很有必要性,分块使用磁盘可以把不同的数据分开存放,这个分开存放比在同一个分区下把文件放在不同的目录要安全很多,比如数据文件比操作系统文件重要很多,分区后即使操作系统崩溃也不会导致数据的丢失。因为以上等等需求,使用磁盘前先规划记录磁盘信息变得尤其重要。

Mbr分区类型使用硬盘的0磁道的0扇区记录整个磁盘的信息。前644个字节存放磁盘的引导信息;然后64个字节存放分区信息,磁盘最多可以分4个主分区,也可以把最后一个分区更改为扩展分区,在扩展分区内继续分区。

gpt分区类型使用0磁道的前34个扇区存放信息,最多可以分128个分区,并且每个分区情况都会有一个备份。

  • 分区查看

df                  显示当前系统已经挂载各磁盘分区的大小和使用率,-h以易读的格式显示分区的大小。
lsblk                显示分区的大小
fdisk –l /device          显示某个硬盘的信息


  • 磁盘分区

mbr分区命令

fdisk /device           这是交互式的命令,也可以通过接受<<eof获取参数
       m           获取帮助
       p           打印分区情况
       n           创建分区
       t           修改分区类型
gpt分区命令
gdisk /device           和fdisk的使用方式差不多


2 文件系统管理

  仅对磁盘进行分区是完全不能满足我们的需求,操作系统管理文件需要更加具有规范的格式,这样才可以高效调用文件查询文件。

  下图就是一个完整的从磁盘到操作系统管理数据的格式。

技术分享

  • 文件系统类型

Windows的文件系统的类型:ntfsvfat

Linuxext#xfsbrtfs

ext3开始之后文件系统具有日志功能

Unix:。。。

网络文件系统:nfsb2fs

分布式文件系统:chp。。。

  文件系统创建

 

 mkfs.{ext#|xfs|brtfs}[option]
      -b   {1024|2048|4096}       指定block的大小
      -L   label                指定lable
      -U  uuid                  指定uuid
      -m  #               指定预留空间百分比
      -i                       指定inode比例,每多少空间创造一个inode
      -I                 指定inode的大小
      -N                 指定inode的熟练
       -O  [^|]
         acl              文件系统默认挂载后是否有acl权限
         sync             实时同步,系统性能会变得特别差
             async
             exec              目录下的文件不许执行


  • 查看和修改

blkid      device          显示分区的uuid和lable信息
       tune2fs [option] /device/part
              -l           列出分区的超级块信息
              -L          指定lable信息
              -U         指定uuid
              -o          指定挂载选项
              -m         指定预留空间大小


3 Swap分区

   swap分区类似windows里的虚拟内存,作用就是虚拟内存使用硬盘模拟内存,内存不够的时候把数据暂存入此处。

   mkswap  /device/part             把格式化为swap分区
   swapon [-p] /device/part       激活分区,-p指定使用的优先级
   swapoff

三 文件系统的使用

1 挂载和卸载分区

mount [option]/device/part
   -o          指定挂载选项
     acl
     sync
     exec
     remount
   -a          重读/etc/fstab文件
umount[/device/part|/dir]           卸载目录
Fuser     
    -v [/device/part |/dir]       查看某目录或文件正在使用的人
  -km[/device/part|/dir]        踢出人


2 fstab

  /etc/fstab这里主要是定义操作系统开机时挂载设备的选项

/etc/fstab的格式

/device/part        /dir        filetyp          option          0     0

       第一个字段是设备的路径或者uuid或者lable

       第二个字段是挂载的命录

       第三个字段是文件系统类型

       第四个字段是挂载选项

       第五个字段是转储频率

       第六个字段是自检顺序

四 外围设备

       添加设备文件

       mknod[选项]... 名称 类型 [主设备号 次设备号]

       光驱

       eject

五 直接操作磁盘数据

dd if=source of=direct   bs=block skip= seek= conv=conversion
    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 把小写字符转换为大写字符
    nocreat 不创建输出文件
    noerror 出错时不停止
    notrunc 不截短输出文件
    sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐


六 总结

  这一章主要学习了磁盘的原理,磁盘的管理,文件系统的管理,各种设备的挂载和使用,和直接操作数据的命令dd

 

 

遗漏

du –sh

       free


本文出自 “老王linux旅程” 博客,请务必保留此出处http://oldking.blog.51cto.com/10402759/1877642

以上是关于磁盘管理的主要内容,如果未能解决你的问题,请参考以下文章

massCode 一款优秀的开源代码片段管理器

如何管理在每个 git 版本中添加私有代码片段?

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

如何使用Android片段管理器传递变量[重复]

Android:使用支持片段管理器时复制片段