2019独角兽企业重金招聘Python工程师标准>>>

概览:
设备文件的创建 
        权限    设备名 类型  主设备号 次设备号    
mknod [-m MODE] NAME type [MAJOR MINOR] 创建时,先查看是否存在设备号的冲突
零磁道零扇区是MBR:Master Boot Record
            主引导记录
            512Bytes: 引导启动OS
                前446bytes: 存放程序,bootloader
                64bytes: 分区表,每16bytes标记一个分区,一共4个分区(主分区)
                2bytes: 55AA, MBR有效性标记   标记当前mbr是否有效
fdisk是不支持GPT格式的硬盘分区,parted是可以支持的               
parted [options] [device [command [options...]...]]  直接跟设备不跟其他会分区
-l, --list  会列出所有分区信息
    lists partition layout on all block devices
command   
mklabel label-type
     Create a new disklabel (partition table) of label-type.  label-type should  be  one  of
     "bsd", "dvh", "gpt", "loop", "mac", "msdos", "pc98", or "sun".

mkpart part-type [fs-type] start end
     Make  a  part-type partition with filesystem fs-type (if specified), beginning at start
     and ending at end (by default in megabytes).  fs-type can be one of  "fat16",  "fat32",
     "ext2",  "HFS", "linux-swap", "NTFS", "reiserfs", or "ufs".  part-type should be one of
     "primary", "logical", or "extended".
move partition start end
     Move  partition  so  that it begins at start and ends at end.  Note: move never changes
     the minor number.
rm partition
     Delete partition.
print  Display the partition table.    
# parted /dev/sdb mkpart primary ext4 1 10G    
#parted /dev/sdb rm 1
# parted /dev/sdb print                         
磁盘管理:

I/O设备:
        磁盘
        网卡

文件:read, write, open, close

设备文件:特殊文件
        只有inode,而没有数据

关联至一个驱动程序,进而跟对应的硬件设备打交道;

/dev: b, c

每个设备都有其设备号:
                主设备号:用于标记设备类型
                次设备号:用于标记同一类型中的不同设备

mknod - make block or character special files
     -m, --mode=MODE
              set file permission bits to MODE, not a=rw - umask
        mknod [OPTION]... NAME TYPE [MAJOR MINOR]  主设备号可以相同,次设备号不能相同
        TYPE may be:

b      create a block (buffered) special file 有缓存

c, u   create a character (unbuffered) special file 无缓存的

p      create a FIFO
            设备文件的命名:由ICANN:互联网名称与数字地址分配机构(Internet
             Corporation for Assigned Names and Numbers)
[root@linux_basic tmp]#mknod -m 664 blocktest b 1 20
[root@linux_basic tmp]#ls -l
total 0
brw-rw-r--. 1 root root 1, 20 Jan  4 07:38 blocktest
[root@linux_basic tmp]#rm blocktest
rm: remove block special file `blocktest'? y
[root@localhost tmp]# mknod test c 1 30
[root@localhost tmp]# ls -l
total 0
lrwxrwxrwx. 1 root root     8 Dec  2 13:10 file1 -> softfile
-rw-r--r--. 1 root root     0 Dec  2 13:09 softfile
crw-r--r--. 1 root root 1, 30 Dec  2 13:27 test

磁盘设备文件命名:
        /dev/hd:
            IDE: 并口接口, 133MB/s
        /dev/sd:
            USB: 串行
            SATA: 串行接口,6Gbps/8
            SCSI: 并行,(Small Computer System Interface) 小型计算机系统接口
            SAS:串行,

rpm:转数

/dev/sd[a-z]
            分区:数字
                /dev/sda1
                /dev/sda2

分区编号:
                    主+扩展分区:1-4
                    逻辑分区:5开始

硬盘分区:
        磁道:track
            扇区:sector

柱面:cylinder:
            分区根据柱面划分,在同一盘片上的两面磁头同时读取,速度快

零磁道零扇区是MBR:Master Boot Record
            主引导记录
            512Bytes: 引导启动OS
                前446bytes: 存放程序,bootloader
                64bytes: 分区表,每16bytes标记一个分区,一共4个分区(主分区)
                2bytes: 55AA, MBR有效性标记   标记当前mbr是否有效

1T: 3主+1扩展(切割1个或多个逻辑分区)
           
        [root@linux_basic tmp]#fdisk -l | grep -A 3 "^Disk /dev/.*"
        Disk /dev/sda: 48.3 GB, 48318382080 bytes
        255 heads(磁头数), 63 sectors/track每磁道多少扇区, 5874 cylinders(柱面)
        Units = cylinders of 16065 * 512 = 8225280 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        --
        Disk /dev/mapper/vg_lvm-lv1: 12.9 GB, 12884901888 bytes
        255 heads, 63 sectors/track, 1566 cylinders
        Units = cylinders of 16065 * 512 = 8225280 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        --
        Disk /dev/mapper/vg_lvm-lv2: 10.7 GB, 10737418240 bytes
        255 heads, 63 sectors/track, 1305 cylinders
        Units = cylinders of 16065 * 512 = 8225280 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes

/proc:
        [root@linux_basic tmp]#cat /proc/partitions
        major minor  #blocks  name
       
           8        0   47185920 sda
           8        1     204800 sda1
           8        2   10485760 sda2
           8        3   36494336 sda3
         253        0   12582912 dm-0
         253        1   10485760 dm-1

分区创建:
     fdisk - Partition table manipulator for Linux
     操作Linux分区表
        查看:fdisk -l [DEVICE]...
   fdisk工具最多可以识别15个分区
        创建分区:fdisk [DEVICE]
            交互式界面,有许多子命令
                p: 显示磁盘分区表
                 p   print the partition table
                n: new,新建分区
                 n   add a new partition
                d: delete,删除分区
                d   delete a partition
                t: 修改分区的系统ID
                t   change a partition's system id
                l: 列表出所有已知的系统ID
                l   list known partition types
                   83  Linux
                   82  Linux swap / So
                   8e  Linux LVM 
                   fd  Linux raid auto
                w: 保存并退出
                w   write table to disk and exit
                q: 不保存退出
                q   quit without saving changes
选n后出现               
     e   extended
   p   primary partition (1-4)

对于已经有分区处于使用状态的磁盘来讲,新建分区后需要让内核重读其分区表:
                CentOS 5:
                    # partprobe [DEVICE]
                CentOS 6:
                    partx -a [DEVICE]
                    partx - telling the kernel about presence and numbering of on-disk partitions.
                    -a     add specified partitions or read disk and add all partitions
                    读磁盘新增的分区
                    kpartx -af  [DEVICE]
                    kpartx - Create device maps from partition tables
                    -a     Add partition mappings
                    -l     List partition mappings that would be added -a
                    -f     force creation of mappings; overrides ’no_partitions’ feature
      查看/proc/partitions,有显示则创建成功
            分区创建工具:sfdisk和parted
------------------------------------------------------------------
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 1
First cylinder (1-6527, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-6527, default 6527): +5G
                            注意这里设定大小时的格式
Command (m for help): p

Disk /dev/sdb: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         654     5253223+   5  Extended

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@lvm ~]# partx -a /dev/sdb
  Warning: Disk has a valid GPT signature but invalid PMBR.
  Assuming this disk is *not* a GPT disk anymore.
  Use gpt kernel option to override.  Use GNU Parted to correct disk.
BLKPG: Device or resource busy
error adding partition 1
[root@lvm ~]# kpartx -af /dev/sdb
  Warning: Disk has a valid GPT signature but invalid PMBR.
  Assuming this disk is *not* a GPT disk anymore.
  Use gpt kernel option to override.  Use GNU Parted to correct disk.
[root@lvm ~]# cat /proc/partitions
major minor  #blocks  name

8        0   52428800 sda
   8        1     204800 sda1
   8        2   10485760 sda2
   8       16   52428800 sdb
   8       17          1 sdb1  说明创建成功了
-------------------------------------------------------------------------------  
死循环的一个简单脚本
[root@lvm ~]# bash -n hello.sh
[root@lvm ~]# ./hello.sh
Hello:ld
Again  hello:jhfld
Again  hello:n
[root@lvm ~]# cat hello.sh
#!/bin/bash
#
read -p "Hello:" kir
while true;do
if [ "$kir" == 'n' ];then
    break;
else
    read -p "Again  hello:" kir
fi
done
------------------------------------------------------------------
    练习:写一个脚本
        1、提示输入一个对其执行分区的新硬件设备文件;
        2、提醒用户接下来的操作销毁所有的数据,你继续吗?
            y或yes: 继续
            n或no:退出
            其它字符:提醒输错了,再来一次;
        3、对磁盘新建分区:
            主分区1:大小512M,
            主分区2:大小2G
        4、创建完成后显示创建的结果;
成功完成及修改次数
----------------------------------------------------------------

[root@lvm shells]# cat disk_part.sh
#!/bin/bash
#
read -p "Input a partition disk device path:" disk
read -p "The following operation will damage the all data on the disk.yes|no(y|n)?" flag

while true;do
 
  if [ "$flag" == 'n' -o "$flag" == 'no' ];then
     break;
  elif [ "$flag" == 'y' -o "$flag" == 'yes' ];then
echo "n
p
1

+512M
n
p
2

+2G
w"|fdisk $disk > /dev/null
  partx -a $disk
  kpartx -af $disk
  fdisk -l | grep  "$disk"
  read -p "The following operation will damage the all data on the disk.yes|no(y|s)?" flag
  else
     echo "Input error."
     read -p "Again input:" flag
   fi
done

转载于:https://my.oschina.net/u/1762991/blog/665603

8.2设备文件及磁盘分区相关推荐

  1. Linux小实验——设备挂载、磁盘分区、格式化、RAID的配置、LVM配置、磁盘配额的配置方法和验证

    小实验--设备挂载.磁盘分区.格式化.RAID的配置.LVM配置.磁盘配额的配置方法和验证 一.实验目的 二.要求 三.实验开始 1.加入新磁盘,创建分区,并把分区类型改成'8e'的RAID 2.创建 ...

  2. php 统计磁盘大小,PHP_PHP统计目录大小的自定义函数分享,计算文件、磁盘分区和目录的 - phpStudy...

    PHP统计目录大小的自定义函数分享 计算文件.磁盘分区和目录的大小在各种应用程序中都是常见的任务.计算文件的大小可以通过前面介绍过的filesize()函数完成,统计磁盘大小也可以使用disk_fre ...

  3. linux 如何打包分区文件,Linux基础------文件打包解包---tar命令,文件压缩解压---命令gzip,vim编辑器创建和编辑正文件,磁盘分区/格式化,软/硬链接...

    作业一: 1)将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) cat /etc/passwd /etc/group > /1.txt 2)将用户信息数据库文件和用户 ...

  4. linux中的如何进行磁盘分区

    本文主要内容 前言 一.linux中的各硬件设备的文件名 0.预备知识 1. 磁盘分区 2. linux支持的文件系统 1.磁盘分区 1.对硬盘进行分区 1. 分区 1. 使用fdisk进行分区 2. ...

  5. Linux磁盘分区介绍

    简介 主要介Linux磁盘分区,挂载,已经磁盘使用情况查看等内容. Linux无论有几个分区,分给哪一个目录使用,它归根结底只有一个根目录,一个独立且唯一的文件结构,Linux中的所有分区都是为了组成 ...

  6. CentOS7磁盘分区及文件系统

    本文首发于我的个人网站: https://hewanyue.com/ 本文作者: Hechao 本文链接: https://hewanyue.com/blog/2bae1e5c.html   一般来说 ...

  7. Linux磁盘分区及文件系统管理之基础概念

    设备文件 关联至设备的驱动程序,是设备的访问入口 设备号 Major 主设备号,区分设备类型,用于标明设备所需要的驱动程序 Minor 次设备号,区分同种类型下的不同设备 创建设备文件 mknod 每 ...

  8. linux磁盘混乱,Linux磁盘设备文件混乱源于Linux内核自身

    在Linux下往往会碰到这样的问题,磁盘的设备文件,比如/dev/sda, sdb, sdc等等在某些情况下会混乱掉,比如sda变成了sdb或者sdc变成了sdb等等,这样无形中会导致磁盘设备管理的混 ...

  9. linux 设备文件分区命令,Linux常见设备及相应/dev/xxx文件名、Mount Point、挂载点、Mount命令、fstab、挂载分区(示例代码)...

    Linux 中的设备有2种类型:字符设备(无缓冲且只能顺序存取).块设备(有缓冲且可以随机存取).这些设备中,有些设备是对实际存在的物理硬件的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理 ...

最新文章

  1. ​京东AI研究院获QuAC机器阅读理解竞赛冠军,EL-QA模型能力业界领先
  2. linux shell 计算时间差
  3. 编译实验三--生成中间代码
  4. 22.类对象和类指针
  5. php伪静态url运用,再谈 THINKPHP 伪静态url(URL访问模式)的设置
  6. 扒一扒.NET Core的环境配置提供程序
  7. 总结JSON.parse()报错VM71:1 Uncaught SyntaxError: Unexpected token u in JSON at position 0等之类的问题
  8. C程序设计语言现代方法07:基本类型
  9. 打破硬件边界,华为EMUI分布式技术如何连接万物
  10. a5 1c语言实现,初识C语言1_qq5fb3b05a5f322的技术博客_51CTO博客
  11. C语言函数取大,C语言函数大全(部分)
  12. CSS案例——静态网页制作
  13. 基于单片机的智能台灯设计
  14. 网站推广优化教程100条(完整版)-
  15. RecSys'22|CARCA:交叉注意力感知上下文和属性进行推荐
  16. STM32CubeMX下STM32单片机环境光传感器(ADC)
  17. 为什么80%的企业会选择云产品?
  18. 网络爬虫之东方财富网股票板块
  19. UNRAID挂载exFat格式的USB磁盘后续(自动挂载)
  20. Android 下拉刷新框架实现

热门文章

  1. (转)PowerHA完全手册(一,二,三)
  2. safari图片跨域
  3. HttpRequest 类
  4. java 反射(Reflection) 详解
  5. jdk1.6 改 jdk1.7或jdk1.8(改回也可以)(图文详解)
  6. 怎么调处vs2010的MSDN帮助文档
  7. debian安装flash插件
  8. 第一次写python
  9. 重构(Refactoring)技巧读书笔记 之二
  10. 树莓派外设开发之接入语音模块