• storage 存储


    storage 存储
    linux存储模式
    五层:
    应用程序 cp ls mv rsync
    虚拟文件系统 VFS   挂载
    文件系统 格式化
    设备驱动 ext4.ko xfs.ko
    物理卷 dd
    物理卷:
    如硬盘或分区:
    硬盘接口:
    IDE,SATA,SCSI,SAS,SSD;
    设备驱动:
    要使用对应的文件系统需要对应的模块。
    如ext4
    lsmod |grep ext4
    如ntfs
    linux内核支持,但redhat内核没有加上对应的功能
    解决方法:
    1,重编内核,加上ntfs支持
    2,用第三方软件(如ntfs-3g),加上此功能
    文件系统:
    有对应的驱动模块,就可以格式化成对应的文件系统
    mkfs.ext4 /dev/sdax
    虚拟文件系统层(VFS):
    先提一个问题:我能不能把ext4文件系统里的一个文件cp到ntfs文件系统里呢?
    答案:可以.
    那么也就是说开发人员开发一个cp命令要支持所有的文件系统,如果出现一个新的文件系统,开发人员需要去修改cp命令的源代码。这样效率低下。
    实际情况是:cp命令源代码不需要修改,就是因为有虚拟文件系统层(VFS)。
    应用层:
    在文件系统上任何操作的命令都是应用层,如ls,cp,mv等
    ----------------------------------------------------------------------------------------------------------------
    dd - convert and copy a file
    msdos 446+64(分区表)+2=512 MBR
    gpt
    1,备份mbr(master boot record主引导记录)
    dd if=/dev/sda of=/backup/mbr.backup bs=1 count=512
    覆盖可用mbr dd if=/dev/zero of=/dev/sda bs=1 count=512
    就会发现fdisk -l 看不到分区,一重启系统就启不来了
    恢复:dd if=/backup/mbr.backup of=/dev/sda
    2,备份整个硬盘
    dd if=/dev/sda of=/dev/sdb --把/dev/sda的数据备份到/dev/sdb
    恢复:dd if=/dev/sdb of=/dev/sda
    dd if=/dev/sda of=/backup/full.backup --把/dev/sda的数据备份成一个文件
    恢复:dd if=/backup/full.backup of=/dev/sda
    3,备份软盘
    dd if=/dev/fd0 of=/backup/fd0.backup bs=1 count=1440
    恢复:dd if=/backup/fd0.backup of=/dev/fd0
    4,从光盘拷贝iso镜像 (把iso镜像文件需要刻录软件如nero把它刻录到光盘)
    dd if=/dev/cdrom of=/xxx.iso
    5,从内存里拷贝资料到磁盘
    dd if=/dev/mem of=/backup/mem.bin
    特殊应用:
    6,销毁磁盘数据
    dd if=/dev/urandom of=/dev/sda --随机数填充磁盘
    7,修复硬盘,当硬盘长时间不使用
    dd if=/dev/sda of=/dev/sda
    8,raw设备(裸设备)或者lvm数据迁移等
    --讲udev时会讲
    裸设备 (没有格式化成文件系统的设备,优势就是跳过文件系统层,提高性能效率)
    稀疏文件
    # dd if=/dev/zero of=test bs=1M count=1 seek=4000000
    # ll test -h
    -rw-r--r-- 1 root root 3.9T Sep 17 16:41 test
    # du -s test
    1024 test
    # dd if=/dev/zero of=test1 bs=1M count=1 seek=17000000
    dd: failed to truncate to 17825792000000 bytes in output file `test1': File too large
    --在ext4下,单个文件最大大小为16T,再大的话就会报错
    单个文件16T是在ext4文件系统默认的block size=4096的情况下,如果块大小为1024,那么单个文件最大大小为4T
    --xfs文件系统测试单个文件大小达到8E
    用dd备份,干掉,恢复分区表
    skip为跳过input(也就是if后接的设备)
    seek为跳过output(也就是of后接的设备)
    446+64(分区表)+2=512  447-510
    1,备份分区表
    dd if=/dev/sda of=/backup/partition_table.bak bs=1 count=64 skip=446
    2,干掉分区表
    dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446
    3,恢复分区表
    dd if=/backup/partition_table.bak of=/dev/sda bs=1 count=64 seek=446
    ====================================
    msdos 有主分区,扩展分区,逻辑扩展分区,mbr的概念
    gpt 没有主分区,扩展分区,逻辑扩展分区的概念,支持单个分区最大超过2TB
    BIOS (Basic input and output system)
    EFI/UEFI (Extensible Firmware Interface)
    fdisk (只能分msdos分区)
    parted (可以分msdos和gpt分区)
    ===================================
    如何查看当前我们使用的是msdos,还是gpt?
    # parted /dev/sda --parted后接你要查看到设备名,再使用print打印信息
    GNU Parted 2.1
    Using /dev/sda
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) print
    Model: ATA ST3500312CS (scsi)
    Disk /dev/sda: 500GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos --这里可以看到是什么类型
    这两种分区格式怎么转换?
    (parted) mklabel gpt --在parted里输入这样的命令去转换
    Warning: Partition(s) on /dev/sda are being used.
    Ignore/Cancel? --宿主机千W不要输入Ignore(表示忽略警告,直接干掉系统磁盘里的所有内容),输入Cancel取消或者ctrl+c取消
    (parted) mklabel msdos
    --注意,不要对正在使用的磁盘做转换(当然你如果不需要当前硬盘的数据的话,也可以直接对使用磁盘做转换;或者先需要备份数据,再做转换)
    一般来说,我们应该要在分区前就选好分区类型,比如如下两个场景:
    场景一:对一个新加的还未使用的硬盘可以直接决定分区类型,再进行分区
    例:使用kvm新加一个4T的硬盘来测试,假设我的kvm虚拟机名字为kvm2
    下面的操作是在宿主机上做的
    # dd if=/dev/zero of=/var/lib/libvirt/images/newdisk.img bs=1M count=1 seek=4000000
    # virsh edit kvm2 --编译虚拟机配置文件,加上新的硬盘,如下一段
    <disk type='file' device='disk'>
    <driver name='qemu' type='raw' cache='none'/>
    <source file='/var/lib/libvirt/images/newdisk.img'/>
    <target dev='vdb' bus='virtio'/>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </disk>
    # virsh destroy kvm2
    # virsh start kvm2
    下面的操作是在虚拟机里面做的
    验证,使用fdisk /dev/vdb分不了大于2T的分区(用fdisk分区一定是msdos分区,并且可以证明msdos单个分区不能超过2T)
    --验证过程省略
    下面使用parted命令把/dev/vdb分成gpt分区,并且单个分区大于2T
    # parted /dev/vdb
    GNU Parted 2.1
    Using /dev/vdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) print --print显示错误,因为还没有决定分区类型
    Error: /dev/vdb: unrecognised disk label
    (parted) mklabel gpt --做成gpt类型
    (parted) print
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 4194GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt --可以看到是gpt类型
    Number Start End Size File system Name Flags
    (parted) mkpart --分区指令
    Partition name? []? 第一个分区 --取一个名字,随意
    File system type? [ext2]? ext4 --类型,你要格式化成什么类型,这里写什么类型
    Start? 2048s --第一个分区以0开始会有警告,这里以2048s开始或者从1049KB开始(gpt分区的特性)
    End? 100G --以什么结束
    (parted) print
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 4194GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Number Start End Size File system Name Flags
    1 1049kB 100GB 100GB 第一个分区
    (parted) mkpart
    Partition name? []? 第二个分区
    File system type? [ext2]?ext4
    Start?100GB
    End?3T
    (parted) print
    Model: Virtio Block Device (virtblk)
    Disk /dev/vdb: 4194GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Number Start End Size File system Name Flags
    1 1049kB 100GB 100GB 第一个分区
    2 100GB 3000GB 2900GB 第二个分区
    (parted) quit
    场景二:安装系统分区时指定分gpt分区
    在第一次安装系统时,选择自定义分区,进入到分区界面分区默认是什么分区类型?如何区分?
    答案: 由硬件决定,有些默认是msdos,有些默认是gpt;区分的方法是在图形创建第一个分区时,看有没有Force to be a primary partition这一句,有则表示为msdos,没有则表示为gpt;
    如果默认为msdos分区,但我想分成gpt分区再安装OS,请问怎么做?
    答案:在安装过程的图形分区那一步切换到文本命令模式(vmware为ctrl+alt+F2,kvm为按图形界面上面的sendkey里选择ctrl+alt+F2);切换到文本模式后,使用parted /dev/sda命令,并mklabel gpt将其定为gpt分区类型,再进行分区(可以直接在parted命令模式继续分区,也可以ctrl+alt+F6切回图形再退到上一步,然后回到分区步骤进行图形分区就是gpt分区了)
    如果是centos7,也可以使用ctrl+alt+F2切换到文本模式,然后使用parted命令操作
  • 相关阅读:
    Visual Detection of Lintel-Occluded Doors from a Single Image
    Linux下快速构建Android编译环境
    How to Train YOLOv4 on a Custom Dataset
    yolo v4 darknet colab
    Deep Image Matting
    给 MSYS2 添加中科大的源
    msys2 mingw64 ffmpeg 搭建最新ffmpeg编译环境 可用 ffmpeg 4.1 及更新版本
    GB28181对接摄像机/NVR视频流
    video.js在iframe中如何解决无法自动播放问题
    LiveGBS-摄像机网页低延时无插件直播实现
  • 原文地址:https://www.cnblogs.com/skyzy/p/9201447.html
Copyright © 2020-2023  润新知