zoukankan      html  css  js  c++  java
  • Linux学习笔记之Linux中的硬盘

    项目7 Linux中的硬盘

    7.1 硬盘分区及格式化

    • 硬盘一般分为IDE硬盘、SCSI硬盘/SATA硬盘
      - IDE硬盘
      驱动器标识符为hd[a-d],hd表示硬盘类型为IDE,中括号中的字母为a、b、c、d中的一个,a是基本盘,b是从盘,c是辅助主盘,d是辅助从盘,指分区,即主分区和扩展分区。例如:hda1代表第一个IDE硬盘上的第一个分区。hdb5代表第二个IDE硬盘的第一个逻辑分区。
      - SCSI/SATA硬盘
      驱动器标识符为sd[a-p]*,sd表示SCSI/SATA硬盘。SCSI/SATA的引导盘使用设备文件/dev/sda1、/dev/sda2、/dev/sda3、/dev/sda4作为主分区或者扩展分区,而以/dev/sda5,/dev/sda6等作为逻辑分区。
    • Linux规定,一块硬盘只能存在4个主分区,分别被命名为sda1、sda2、sda3和sda4(此时不能再创建扩展分区);一个硬盘最多只能创建一个扩展分区,扩展分区不能直接使用,必须在扩展分区中划出逻辑分区才可以使用;逻辑分区则从5开始标识,每多一个逻辑分区,就在末尾的分区号上加1, 逻辑分区没有个数限制 。因此,如果想拥有超过4个分区数,合理的分区结构应该是:先划分出不超过3个的主分区,然后创建一个扩展分区,再从扩展分区中划分出多个逻辑分区。
    • 相关指令

    1.查看分区情况:ls /dev | grep sd

    2.查看指定硬盘的分区情况:fdisk –l /dev/sda

    3.创建主分区:

    fdisk /dev/sdc,进入分区界面,输入字母m可显示帮助信息。输入n增加一个新的分区,程序提示用户选择创建主分区还是扩展分区,这里我们先创建主分区,因此输入p,输入分区编号1,即可建立第1个主分区,然后在新分区的起始柱面处直接按Enter键使起始柱面为1,在新分区的结束柱面处,输入+1000M,表示新建分区的大小为1000MB。创建好分区之后,输入命令字符p可以查看分区表的情况,可看出fdisk命令将分区的结束柱面调整到了128。

    4.创建扩展分区:

    输入增加分区的命令字符n,接着输入字符e创建一个扩展分区。输入分区号2,输入分区的起始柱面,直接按Enter键使用默认值,在结束柱面处直接按Enter键使用默认值,让扩展分区占用所有的未分配空间。输入字符命令p,从分区情况可以看出/dev/sdc2的分区类型为Extended(扩展分区)。

    5.创建逻辑分区:

    新建的扩展分区并不能直接使用,必须将其划分为逻辑分区。输入字符n,此时将不会显示扩展分区字符e,取而代之的是逻辑分区字符l。输入l,直接按Enter键输入分区的起始柱面,在结束柱面处输入+1000M。用类似的方法创建其余4个逻辑分区,最后输入字符命令p,查看分区的情况。扩展分区的设备名为/dev/sdc2,在该分区下包含5个逻辑分区,在实际应用中不能直接访问/dev/sdc2中的数据,而只能通过逻辑分区进行访问。逻辑分区的编号是从5开始的,所以5个逻辑分区的名字分别为/dev/sdc5、/dev/sdc6、/dev/sdc7、/dev/sdc8、/dev/sdc9。
    最后输入字符w,保存分区修改并退出fdisk程序。

    6.修改分区类型:

    新创建的分区类型默认为Linux类型,下面我们使用fdisk的t选项来修改分区类型,将/dev/sdc9改为swap分区。具体步骤为:执行fdisk /dev/sdc命令,输入p显示分区信息,输入t修改分区类型,输入分区序号9,输入分区类型的代码,输入大写字母L可显示不同分区类型对应的编号。在此输入82 ,输入p命令字符,可以看到/dev/sdc9的分区类型已经改为Linux swap分区 ,输入w保存分区,退出fdisk程序。

    7.格式化分区:

    创建好分区以后,在/dev目录中将看到对应分区的设备名称。刚建立的分区还不能使用,必须使用mkfs命令格式化为指定的文件系统以后才能使用。输入mkfs -t ext4 /dev/sdb1,该指令可以将sdb1硬盘格式化为ext4

    8.磁盘检查命令:

    对于磁盘这种外部存储设备,当然有出问题的时候,所以,我们平时最好多进行检查,防患于未然。
    ①fsck 检查未挂载的分区是否正常:fsck -t ext4 /dev/sdb6 //检查/dev/sdb6是否正常。
    ② badblocks //检查是否有坏的扇区:badblocks /dev/sdb5

    9.挂载硬盘分区:

    将磁盘进行分区并格式化好以后,还需要使用mount命令将磁盘分区挂载到根目录的某一个空的子目录中。首先在文件系统中创建一个空目录作为挂载点,如将格式化后的分区/dev/sdc5用来保存音乐文件,可使用 mkdir /usr/music和mount /dev/sdc5 /usr/music命令,执行完这两条命令后,即可以通过/usr/music目录访问/dev/sdc5分区中的内容。

    10.挂载光驱:

    如果想使用光驱,必须将光驱挂载到文件系统中。通常情况下将光驱挂载到/mnt/cdrom目录下,执行mkdir /mnt/cdrom和mount /dev/cdrom /mnt/cdrom这两条命令后,就可以使用ls /mnt/cdrom命令显示光驱中的文件。

    11.挂载U盘:

    将U盘插入计算机USB接口中,使用ls /dev/sd*命令查看U盘的设备名,假如sdd就是U盘设备,sdd1就是U盘的分区。执行mkdir /mnt/usb和mount /dev/sdd1 /mnt/usb这两条命令后,就可以使用ls /mnt/usb命令显示U盘中的文件。

    12.挂载Windows下的C盘(FAT32格式):

    执行mkdir /mnt/dosc和mount -t vfat /dev/sda1 /mnt/dosc这两条命令后,就可以使用ls /mnt/dosc命令显示C盘中的文件。(注意:C盘必须已经被格式化为FAT32格式。)

    13.自动挂载文件系统:

    自动挂载文件系统指的是系统启动以后自动将硬盘中的分区挂载到文件系统中,我们就可以直接使用这些分区中的内容了,而不用在每次需要使用某个分区的时候,再去手动输入命令进行挂载。

    Linux系统中,在/etc/fstab文件中存储了自动挂载文件系统的参数,若想要系统在每次启动时自动挂载指定的文件系统,则必须修改该文件中的参数。使用cat命令打开/etc/fstab文件,fstab文件是由一条一条的记录所组成,其中每一行表示一条记录,代表一个自动挂载项。每条记录由6个字段组成,第1个字段是设备名称,第2个字段设备挂载点,第3个字段显示文件系统的类型,第4个字段是挂载选项,使用defaults表示系统自动识别文件系统进行挂载,第5个字段设置是否备份,0表示不备份,1表示要备份,第6个字段设置自检顺序,该字段被fsck命令用来决定在系统启动时需要被扫描的文件系统的顺序,根文件系统“/”对应该字段的值为1,其他文件系统为2,如果某文件系统在启动时不需要扫描,则该字段的值设置为0。如果想要系统自动挂载/dev/sdc5分区,可使用vi命令打开/etc/fstab文件并添加下面这行后保存退出。

    输入/dev/sdc5 /usr/music ext4 defaults 0 0。这样系统启动后就可以通过/usr/music目录直接访问/dev/sdc5分区中的内容,而不用每次都使用mount命令来挂载该分区。(注意:由于fstab文件非常重要,如果这个文件有错误,就可能会造成系统不能正常启动。因此向fstab文件中添加数据时应非常小心。修改完该文件后务必使用mount -a命令测试有没有错误。)

    14.显示系统内所有已经挂载的文件系统:

    输入mount,不带任何参数执行mount命令,则会显示当前系统中已经挂载的所有的文件系统列表。

    15.卸载设备——umount:

    格式: umount <设备名或挂载点>
    说明:卸载指定的设备,既可以使用设备名也可以使用挂载点名。
    举例:如果已经使用命令mount /dev/cdrom /mnt/cdrom将光驱挂载成功的话,使用以下两条命令中的任何一条都可以成功卸载刚才挂载的光盘。输入umount /dev/cdrom或umount /mnt/cdrom,这两条命令均可以卸载刚才挂载的光盘。

    16.增减虚拟内存原理:

    通过将硬盘中某一个可用分区的类型转换为Linux swap /Solaris分区,然后制作成swap交换分区,就可以增加Linux操作系统内的虚拟内存,同样,使用相关的命令也可以减少系统内的虚拟内存。

    17.增加虚拟内存的具体步骤如下:

    在系统中增加一块新硬盘/dev/sdb。
    将新硬盘分区,并设置其中的一个可用分区类型为Linux swap交换分区,例如将/dev/sdb6的分区类型改变为Linux swap交换分区。
    使用命令:mkswap /dev/sdb6制作出swap分区。
    使用命令:swapon /dev/sdb6增加系统内的虚拟内存。

    18.减少虚拟内存的具体步骤如下:

    使用swapoff /dev/sdb6删除刚才增加的虚拟内存。


    7.2 磁盘配额

    • 限制磁盘配额,可以避免磁盘空间被某些用户用完
    • 磁盘配额是系统管理员用来监控和限制用户或组对磁盘空间的使用情况的工具;可以保证所有用户都拥有自己独立的文件系统空间,确保用户使用系统空间的公平性和安全性
    • 要使用磁盘限额,需满足相关条件:磁盘限额是针对分区的,只有分区才有磁盘限额的说法;需要内核的支持;分区的格式是ext4的文件系统才行;只有拥有管理员权限,才可以设置磁盘限额; 但是要注意,磁盘限额只能限制一般的用户,对root用户无效
    • 磁盘限额的基本概念
      • 硬限制(hard limit):指的是每个用户或组可拥有的磁盘空间或文件的绝对数量,绝对不允许超过这个限制
      • 软限制(soft limit):一个用户在文件系统可以拥有的最大磁盘空间和最多文件数量,在某个宽限期内可以暂时超过这个限制
      • 宽限时间(grace period):默认为7天。如果7天后,用户使用磁盘空间的数量仍然超过软限制,则系统将会禁止此用户账号;要重新激活账号,必须由系统管理员来进行
    • 用户或组使用磁盘空间的限制有以下两个方面:
      –限制用户或组可以拥有的inode数(文件数)
      –限制分配给用户或组的磁盘块的数目(以千字节为单位的磁盘空间)。
    • 相关命令

    (1)edquota

    进行磁盘限额的最常用配置程序,它会打开编辑器vi让我们对用户或者组群的磁盘配额进行设置。其语法格式如下:

    edquota [-p protoname] [-u | g] [username | groupname] [-t]

    参数说明:

    -u:设置用户磁盘限额,这是默认参数。

    -g:设置群组磁盘限额。

    -p:套用指定用户或者群组的磁盘配额限制。

    -t:设置宽限时间。

    举例:

    edquota -u sjh

    edquota –t

    edquota -p sjh -u sjh222

    (2)setquota

    通过命令行对用户或群组的磁盘限额进行设置。#setquota [-u|-g] 名称 block-soft block-hard inode-soft inode-hard filesystem-name

    参数说明:

    -u:设置用户磁盘限额,这是默认参数。

    -g:设置群组磁盘限额。

    -p:套用指定用户或者群组的磁盘配额限制。

    -t:设置宽限时间。

    举例:

    setquota -u sjh 102400 204800 0 0 /home

    setquota -t 5 5 /home

    (3)quota:单一用户或者组群的quota报表

    查询单个用户或单个组群磁盘空间的限制和已经使用的空间。其语法格式如下:

    quota [-uvs] [username]

    quota [-gvs] [groupname]

    参数说明:

    -u:显示用户的磁盘空间限制。

    -g:显示群组的磁盘空间限制。

    -v:显示每个用户在文件系统中的quota值。

    -s:使用1024为倍数来指定单位,会显示如M之类的单位。

    举例:

    quota -uvs sjh

    quota -gvs root

    (4)repquota:针对文件系统的限额做报表

    报告磁盘空间配额的状况,明确显示出每位用户或每个组群已使用多少空间。

    repquota -a [ugvs]

    -a:直接到/etc/mtab查询具有quota标志的文件系统,并报告quota的结果。

    -v:输出的数据将含有文件系统相关的详细信息。

    举例:

    repquota -uvs /home

    repquota -augvs

    (5)quotacheck:扫描文件系统生成quota日志文件

    扫描所有挂接到系统上的分区,并在各分区的文件系统根目录下产生quota的日志文件:aquota.user和aquota.group。

    举例:

    quotacheck -avug

    quotacheck -avug -mf

    tacheck -u /home

    quotacheck -uv /home

    quotacheck -cmug /home

    (6)quotastats

    显示与磁盘配额有关的统计信息。

    举例:

    quotastats

    (7)warnquota:对超过限额者发出警告信

    为超过限额的用户发送邮件,它会在后台自动运行。

    举例:

    warnquota

    (8)quotaon:打开磁盘配额限制。

    举例:

    quotaon /home

    quotaon –avug

    (9)quotaoff:关闭磁盘配额限制。

    举例:

    quotaoff /home

    关闭磁盘配额功能之后,必须使用命令 #quotacheck -cmug /home更新aquota.user和aquota.group文件,再使用quota -u sjh或者repquota -u /home查看,此时可以看到为用户设置的磁盘限额已经清除。

    • 相关实操

    为/home目录设置磁盘限额,假设Linux系统中已经存在普通用户sjh,设置sjh的软限制为100M,硬限制为200M,宽限时间为14天。

    实践流程1(确保文件系统支持):

    (1)查看/home是不是独立的文件系统(也即独立的磁盘分区)。

    命令:mount | grep home或者df -h /home

    (2)查看/home是不是支持quota功能,ext4文件系统肯定支持quota功能,下面开启对quota的支持。

    如果只是想在本次开机中实验quota,那么可以使用如下的命令来手动加入quota的支持:

    mount -o remount,usrquota,grpquota /home

    然后使用命令:mount | grep home确认开启了对quota的支持。

    如果想让/home永久支持quota功能,需要修改/etc/fstab文件,在原来的defaults选项后面添加字符“,usrquota,grpquota”启用quota功能。

    实践流程2(新建quota配置文件):

    quotacheck -avug

    ls -l /home/a* //查看/home下是否已经生成aquota.user和aquota.group文件。

    实践流程3(quota启动与限制值设置):

    quotaon -avug //打开磁盘限额功能。

    该命令打开了/etc/mtab中已定义磁盘限额的所有分区的磁盘限额功能。

    edquota -u sjh //在vi中将block的soft设置为102400,hard设置为204800

    edquota -t //在vi中将block的宽限时间设置为14天。

    实践流程4(quota限制值的报表):

    quota -uvs sjh

    repquota -auvs

    实践流程5(测试与管理):

    测试一:利用sjh的身份,创建一个150M的大文件,并查看quota的结果。

    su - sjh

    $dd if=/dev/zero of=bigfile bs=1M count=150

    repquota -auvs

    测试二:利用sjh的身份,再创建一个100M的大文件,让总容量超过200M。

    dd if=/dev/zero of=bigfile2 bs=1M count=100

    $du -sm

    200M //果然达到极限。

    warnquota //使用warnquota命令同时给超过磁盘配额的用户和root发邮件,用户使用mail命令接收邮件。

    mail

    下面开始清理sjh的磁盘空间,将大文件bigfile和bigfile2删除,然后查看空间使用情况:

    quota -uvs sjh

    实践流程6(quota关闭):

    quotaoff -a

    quota -uvs sjh

    quotacheck -cmug /home //此条命令更新aquota.user和aquota.group文件

    quota -uvs sjh

    repquota -auv //再次查看时,sjh的配额限制已经被清除

    彩蛋(因后续随笔内容更新,思维图没有同步更新,请读者自行注意)


    未完,待续 ~

  • 相关阅读:
    MySQL 查询树结构、循环查询、查看函数、视图、存储过程
    SpringBoot 部署:外置依赖包
    springboot集成docker实现自动化构建镜像说明
    Chrome谷歌浏览器常用快捷键、开发技巧
    Windows常用CMD命令
    Git 版本管理,与 SVN区别对比
    TensorFlow重新导入restore报错: OP_REQUIRES failed at save_restore_v2_ops.cc:184 : Not found: Key Variable not found in checkpoint
    MySQL字符集设置
    Hive 时间操作
    深度思考:如何规划你的职业生涯
  • 原文地址:https://www.cnblogs.com/codeplayer1999/p/12653721.html
Copyright © 2011-2022 走看看