管理系统存储
来源:互联网 发布:淘宝微商怎么做 编辑:程序博客网 时间:2024/05/29 03:19
存储设备的管理
1 设备的查看
1.1发现系统中的设备(能不能被使用未知)
fdisk -l cat /proc/partitions
使用fdisk -l 这个命令,从图片中我们可以看到,我们这台主机上面有两个硬盘,/dev/vda和/dev/vdb,大小都为8G。/dev/vda已经被划分成了三个区,文件系统为xfs,/dev/vdb这个硬盘还是个新的,什么都没有设置,接下来我们所有的实验将围绕着这个硬盘展开。
使用cat /proc/partitions命令,这个文件存储的是我们的分区表信息
1.2 系统发现的,但是没有投入使用,随时可以使用
blkid ##主要用来查看设备的id信息
1.3 发现并且在使用的设备
df - report file system disk space usage df [OPTION]... [FILE]... ##默认单位为k OPTIONS -h, --human-readable print sizes in human readable format(e.g., 1K 234M 2G) -H, --si likewise, but use powers of 1000 not 1024
2.设备名称的读取
/dev/xd*x=s /dev/sd* #sata硬盘,或者iscsi网络存储 x=v /dev/vd* #虚拟硬盘,一般使用在虚拟机里x=h /dev/hd* #ide硬盘,一般出现在老式电脑中*=a~... #/dev/vda,系统中第一块虚拟硬盘/dev/sda1 #系统中的第一块硬盘中的第一个分区/dev/cdrom, /dev/sr[0-...] #系统中的光驱/dev/mapper/* #系统中的虚拟设备
3.设备的使用
设备必须要用目录来对设备中的内容进行读取
所以设备在使用时需要做挂载动作
3.1设备挂载
blkid:识别可用设备mount 设备 挂载点 #挂载设备mount /dev/sdb1 /mnt #把系统中的第二块硬盘的第一个分区挂载到mnt下只读挂载: mount -o ro /dev/sdb1 /mnt(默认为读写挂载)重新挂载: mount -o remount,rw /mnt|/dev/sdb1 :对设备做热更改,在设备被使用时更改设备的挂载参数为rw
我们使用blkid命令查看一下主机里面有哪些设备是系统发现的,但是没有投入使用,随时可以使用的。接下来我们这里的实验将会使用/dev/vdb3这个设备。
这里,我们将设备挂载到/mnt这个目录下,以后,我们对/mnt这个目录的写入更改即是对这个设备的写入和更改,默认硬盘的挂载是读写的,所以我们可以给这个目录中写入东西,于是,我们在这里成功建立了三个文件。但是这个文件是建立在设备中的,我们如果将这个设备卸载了,那么这个文件夹里面也就没有了这些文件。
硬盘挂载默认是可读写的,但如果我们想要只读呢?我们可以使用下面的命令对硬盘进行只读挂载,实验证明只读挂载是不能往设备里面写东西的,所以我们创建文件是失败的。(因为我是用同一块设备进行实验,所以我第一步是先将设备卸载,卸载了以后查看这个文件夹是空的,并没有之前建立的文件,就说明之前对这个挂载了设备的文件夹的更改完全是对设备进行的)
当设备正在被使用的时候,我们是不能直接对其卸载的,但如果我们想要对设备重新挂载,即想要从只读挂载变为读写挂载的时候,我们就可以使用如下命令,对设备进行热更改,在设备被使用时更改设备的挂载参数为rw。这个时候,我们就可以在目录中创建文件。这里的123文件是我们之前对设备写入的文件。
为什么要进行热更改呢?因为我们如果在企业里工作,那么我们要管理的设备可能在被别人使用,我们并不能让它停止工作然后去重新挂载,这样在企业中是不合理的。
3.2设备卸载:
umount 设备|挂载点 #卸载设备
#注意:当卸载设备时出现下列情况[root@foundation27 ~]# umount /dev/sdb1umount: /mnt: target is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))标示设备正在被系统的某个程序使用,处理方式为:进程发现的方式fuser -vm /dev/sdb1lsof /dev/sdb1进程终止的方式kill -9 pidfuser -kvm /dev/sdb1卸载设备:umount /dev/sdb1
当我们在卸载设备的时候,报错说设备在忙,根据提示我们可以使用fuser和lsof这两个命令解决,此时我们就可以使用man来查看一下命令的使用,这里我就直接使用了。
使用这两个命令都可以查看到设备正在被系统的某个程序使用。
此时我们可以使用 ‘kill -9 pid‘ 或者 ‘fuser -kvm 设备‘ 两个命令将这个正在占用的程序终止,然后我们就可以顺利卸载了。
4.分区管理
MBR的意思是“主引导记录”,它有自己的启动器,也就是启动代码,一旦启动代码被破坏,系统就没法启动,只有通过修复才能启动系统。最大支持2TB容量,在容量方面存在着极大的瓶颈,那么GPT在今后的发展就会越来越占优势,MBR也会逐渐被GPT取代。
MBR分区表与GPT分区表的关系
与支持最大卷为2 TB(Terabytes)并且每个磁盘最多有4个主分区(或3个主分区,1个扩展分区和无限制的逻辑驱动器)的MBR磁盘分区的样式相比,GPT磁盘分区样式支持最大卷为18 EB(Exabytes)并且每磁盘的分区数没有上限,只受到操作系统限制(由于分区表本身需要占用一定空间,最初规划硬盘分区时,留给分区表的空间决定了最多可以有多少个分区,IA-64版Windows限制最多有128个分区,这也是EFI标准规定的分区表的最小尺寸)。与MBR分区的磁盘不同,至关重要的平台操作数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT分区磁盘有备份分区表来提高分区数据结构的完整性。
4.1设备分区信息
mbr主引导记录446个字节
mpt主分区表64个字节
硬盘的有效性标识“55aa”2个字节
一个主分区占用16个字节记录分区信息
一块硬盘上如果用mbr的分区方式最多可以存在4个主分区
主分区;扩展分区;逻辑分区
我们知道硬盘的第一个扇区也就是第0扇区是用来存放主引导记录(MBR)的,因此也称MBR扇区。一个扇区是512字节,因此MBR的大小也是512字节,其具体数据结构:446个字节的引导代码、64个字节的分区表及2个字节的签名值”55AA”。由于MBR的分区表只有64个字节,这决定了它只能存储4个分区记录。这就是为什么一块硬盘最多只能有4个“主分区”的原因。
一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个。且主分区+扩展分区总共不能超过4个。逻辑分区可以有若干个。扩展分区是不能直接用的,他是以逻辑分区的方式来使用的,所以说扩展分区可分成若干逻辑分区。他们的关系是包含的关系,所有的逻辑分区都是扩展分区的一部分。
4.2 创建分区
[root@foundation27 ~]# fdisk /dev/vdbCommand (m for help): m #获取帮助Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition ##删除分区 g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types m print this menu n add a new partition ##新建分区 o create a new empty DOS partition table p print the partition table ##显示分区表信息 q quit without saving changes ##退出 s create a new empty Sun disklabel t change a partition's system id ##修改分区id u change display/entry units v verify the partition table w write table to disk and exit ##将当前操作写入硬盘分区表 x extra functionality (experts only)Command (m for help): n #创建分区Partition type: #创建分区类型 p primary (1 primary, 0 extended, 3 free) e extendedSelect (default p): pPartition number (1-4, default 1): 1 #确定主分区idFirst sector (2048-16777215, default 2048): #分区起始块的位置,用默认Using default value 2048Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215): +100M #分区结束块位置,用+大小的方式指定Command (m for help): wq ##保存分区策略并退出fdisk界面cat /proc/partitions #查看设备是否被系统识别
在你不知道自己的主机有哪些设备可以使用的时候,你可以使用 ‘fdisk -l‘ 命令来查看设备情况。这里我就不查看了。
接下来使用如下命令来对/dev/vdb这个设备进行分区:
若是不知道用法,可以输入m进入帮助中心,查看用法。这里就不演示了,直接用。n表示新建分区;
第二步为选择分区类型,p表示主分区,e表示扩展分区,这两个代表什么意思前面都有介绍,这里就不加赘述了。因为我们这个设备是新的,所以它没有任何分区情况,所以我们可以直接回车默认建立p主分区。
接下来为起始分区号码,使用默认值1即可。
下来为分区起始块的位置,用默认。
后来是分区结束块位置,用+大小的方式指定,这里我们设定为+100M,即这个分区的大小为100M。
完成上面的步骤,我们这个分区就建立好了,我们可以使用p来显示分区表信息,就可以看到我们刚才创建出来的分区,完成这些以后,我们就可以wq保存分区策略并退出fdisk界面。这里注意,如果最后输入的是q,那么表示直接退出,我们之前做的设定都不生效,所以如果想要策略生效,记得要输入wq保存退出。
保存退出后提示我们已经更新了分区表信息。
我们可以使用如下命令查看分区表信息,看看我们刚才建立的分区是否存在,我们可以看到/dev/vdb1这个我们刚才创建的分区是存在的,即刚才的设定都是生效的。
4.3格式化分区
当我们对设备进行分区后,是不能直接使用的,需要对分区进行格式化设定文件系统,比如说分区是一张白纸,我们需要使用它,就应该先给它打格画线,而这步就相当于格式化。
mkfs.xfs /dev/vdb1 #格式化设备,在设备上安装文件系统xfs可以用mkfs.+Tab*2 #查看系统支持的文件系统类型blkid #查看可用设备,可以看到被格式化好的/dev/vdb1
使用blkid这个命令可以看到我们格式化后的/dev/vdb1,文件系统为xfs,此刻它是系统发现的,但是没有投入使用,随时可以使用的分区。要想使用它,还有最后一步,挂载。
4.4挂载分区
mount /dev/vdb1 /mnt #挂载设备,使设备投入使用
挂载设备到/mnt上,此后对/mnt所做的行为都是对/dev/vdb1所做的。将会被记录在设备上,一旦设备卸载,/mnt这个目录恢复到挂载前的样子。
这里我们在挂在了设备的/mnt目录下面新建了3个文件,在设备挂载的情况下我们是可以看到目录下面的文件的,当我们把设备卸载了以后,/mnt就恢复到了原来的空目录,这三个文件将保存在设备中,而不是/mnt这个目录,当我们重新挂载了设备以后,我们就有可以看见这三个文件了。
一般我们会把设备挂载到一个空的目录下面,因为设备一旦挂载,目录中以前的东西就都看不见了,当然这是暂时的,当我们将这个设备卸载以后,就可以看到目录本来的东西,但为了不影响我们对信息的获取,我们一般都会把设备挂载到一个空的目录下面,当然我们可以自己新建一个目录去挂载。
4.5设备永久挂载 如果错了,系统会起不来!!!
我们知道在shell中做的命令都是暂时的,如果想要永久挂载,就要将其写入配置文件中,让系统开机的时候去读取配置文件,这样就会在开机时自动挂载。vim /etc/fstab #设备挂载策略文件 man fstab设备 挂载点 文件系统类型 挂载参数 是否备份设备 是否检测设备 /dev/vdb1 /westos xfs defaults 0 0:wqmount -a #让fstab中未生效的策略生效
我们先编辑/etc/fstab这个配置文件,在里面写入我们想要的挂载策略,参考上面给出的例子进行编辑,因为我们设定的是开机自动挂载在/westos这个目录下,而我们系统中并没有这个目录,所以在让fstab中未生效的策略生效的时候,系统报错,说/westos这个目录不存在,此时我们创建一个/westos目录即可。然后再重新生效策略的时候就成功了。
我们用df命令去查看系统挂载信息时,发现设备挂载在/mnt下面,那是我们之前挂载的地方,它会在我们关机后自动卸载,开机后/dev/vdb1这个设备就会自动挂载到/westos这个目录下,我们就先不重启电脑了,有兴趣的话你可以重启看看,这里,我们手动卸载一下设备,然后让策略重新生效,它就会自动挂载到我们设定的/westos这个目录下
4.6删除分区
umount /dev/vdb1fdisk /dev/vdb ----> d
删除分区之前,应该先对分区进行卸载,卸载可以跟设备或者挂载点,我这里跟的是挂载点,然后使用命令去删除分区。
删除分区之前,我们可以先使用p看一下设备上面的分区情况,以免误删,按d后再按删除对应的分区号。
删除完后,若是对自己不放心,可以再次按p查看分区情况,看看分区有没有被删除,这里/dev/vdb1已经被删除了。最后再按wq保存退出,它会自动更新分区表信息。
5.swap 分区的管理
swap交换分区,系统自己使用,不需要挂载
5.1 swap分区的查看
[kiosk@foundation27 Desktop]$ swapon -sFilename Type Size Used Priority/dev/sda2 partition 3933180 5956 -1
使用命令可以发现我的电脑上有一个缓存分区为/dev/vda2
5.2 swap分区的建立
5.2.1 划分分区,并修改分为的id为swap
[root@node1 ~]# fdisk /dev/vdb Device Boot Start End Blocks Id System/dev/vdb1 2048 2050047 1024000 83 Linux #默认情况下此分区是linux的普通分区Command (m for help): t ##修改idSelected partition 1Hex code (type L to list all codes): l ##列出所有id类型代码Hex code (type L to list all codes): 82 ##把/dev/vdb1的分区类型修改为swap,swap类型代码为82Changed type of partition 'Linux' to 'Linux swap / Solaris'Command (m for help): p ##查看分区情况 Device Boot Start End Blocks Id System/dev/vdb1 2048 2050047 1024000 82 Linux swap / Solaris
首先我们要建立一个分区:
默认建立的分区为普通分区,标签为83,我们需要按t修改标签为缓存分区 82 ,标签可以按 t 来查看。修改完成以后,我们可以查看分区情况,id变成了82,System变成了swap。完成以后,我们wq保存退出。
5.2.2格式化
[root@node1 ~]# mkswap /dev/vdb1 ##格式化设备为swap文件系统格式
当我们格式化为swap文件系统的时候会出现下面的情况,这是在说我们这个设备之前的老的文件系统为xfs,这个时候成功更改成了swap文件系统。
5.2.3激活
[root@node1 ~]# swapon -a /dev/vdb1 ##激活swap设备,使系统利用此设备[root@node1 ~]# vim /etc/fstab ##让此设备开机自动激活/dev/vdb1 swap swap defaults 0 0
当磁盘全部被占用,不能创建新分区时,可以用文件来代替分区
[root@node1 ~]# dd if=/dev/zero of=swapfile bs=1M count=1000
此文件创建后的步骤和设备的步骤一致
[root@server ~]# dd if=/dev/zero of=/swapfile bs=1M count=10001000+0 records in1000+0 records out1048576000 bytes (1.0 GB) copied, 8.23554 s, 127 MB/s[root@server ~]# mkswap /swapfileSetting up swapspace version 1, size = 1023996 KiBno label, UUID=606f9a88-c0a3-4f5d-9071-2c6592146279[root@server ~]# swapon -a /swapfileswapon: /swapfile: insecure permissions 0644, 0600 suggested.[root@server ~]# swapon -sFilename Type Size Used Priority/dev/vdb1 partition 102396 0 -1/swapfile file 1023996 0 -2
先使用如下命令用文件创建出一个1000M的“分区“,然后格式化为swap文件系统,激活。然后查看缓存分区就能看见。
5.2.4swap分区的删除
[root@node1 ~]# vim /etc/fstab[root@node1 ~]# swapoff /dev/vdb1[root@node1 ~]# swapoff /swapfile[root@node1 ~]# fdiak /dev/vdb[root@node1 ~]# rm -rf /swapfile
编辑配置文件,将我们之前做过的策略全部删除,然后将/dev/vdb1和/swapfile从缓存分区中取出,最后删除建立的文件以及分区。
6.磁盘配额
为磁盘使用用户分配额度
分区配额是针对设备而言的
提前建立好分区并格式化为xfs文件系统
6.1 激活设备配额参数
mount -o usrquota /dev/vdb1 /westos/chmod 777 /westos/edquota -u student /dev/vdb1Disk quotas for user student (uid 1000): Filesystem blocks soft hard inodes soft hard /dev/vdb1 51200 0 51200 1 0 0测试: su - student[student@server ~]$ dd if=/dev/zero of=/westos/file1 bs=1M count=51dd: error writing ‘/westos/file1’: Disk quota exceeded ##超过额度限制51+0 records in50+0 records out52428800 bytes (52 MB) copied, 0.404446 s, 130 MB/s查看是否分配好配额:mount/dev/vdb1 on /westos type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)vim /etc/fstab ##开机自动激活配额/dev/vdb1 /westos xfs defaults,usrquota 0 0
给student用户在/dev/vdb1分区中设置配额参数为51M:这里的配额参数不要超过你的分区大小。
用student测试:往里面写40M的东西时可以的,但一旦超过配额50M,写入51M东西的时候它就会出现错误,超出配额。
当我们不想设置这些配额的时候,可以使用下面的命令,将我们之前设置的配额参数更改为原来的0,然后卸载这个设备就可以重新使用了
以下是我在做这些实验时碰见的一些问题及解决方法:
问题1:[root@server ~]# mount -o usrquota /dev/vdb1 /westosmount: unknown filesystem type 'swap'解决方法:[root@server ~]# mkfs.xfs /dev/vdb1 -f问题2:[student@server ~]$ dd if=/dev/zero of=/westos/file1 bs=1M count=201dd: error writing ‘/westos/file1’: No space left on device ##没有地方可用92+0 records in91+0 records out95928320 bytes (96 MB) copied, 0.0804583 s, 1.2 GB/s原因:我给分区划分了100M,,尽管给student了200M额度,但是它只有100M可以用
7.gpt
7.1 mbr <—–> gpt
[root@server ~]# parted /dev/vdbGNU Parted 3.1Using /dev/vdbWelcome to GNU Parted! Type 'help' to view a list of commands.(parted) mklabel ##修改设备分区方式标签 New disk label type? aix amiga bsd dvh gpt loop mac msdos pc98 sun New disk label type? gpt|msdos ##把原有dos标签改成gpt格式|把gpt的改成mbr的Warning: The existing disk label on /dev/vdb will be destroyed and all data on this disk will belost. Do you want to continue?Yes/No? yes (parted) quit Information: You may need to update /etc/fstab.[root@server ~]# fdisk -l...Disk label type: gpt ##设备分区方式为gpt...
使用命令修改设备分区标签,将它改成gpt
这里说明,修改标签以后,以前的分区信息全都不见了。
dos —–>gpt
gpt——>dos
7 分区加密
7.1 加密:
1) [root@server ~]# fdisk /dev/vdb 建立分区(暂时不格式化)2) [root@server ~]# cryptsetup luksFormat /dev/vdb1 Are you sure? (Type uppercase yes): YES 必须大写,小写不生效 Enter passphrase: Verify passphrase: ##密码不能小于八位3) [root@server ~]# cryptsetup open /dev/vdb1 westos Enter passphrase for /dev/vdb1: 4) [root@server ~]# mkfs.xfs /dev/mapper/westos 5) [root@server ~]# mount /dev/mapper/westos /mnt [root@server ~]# touch /mnt/file{1..10}6) [root@server ~]# umount /mnt [root@server ~]# cryptsetup close westos7) [root@server ~]# cryptsetup open /dev/vdb1 westos Enter passphrase for /dev/vdb1: [root@server ~]# mount /dev/mapper/westos /mnt/
使用命令设置分区加密,确定为大写YES,给它加个盖子名为westos,这个名字可以随便起,此时我们原本要给/dev/vdb1做文件系统,现在就变成了要给/dev/mapper/westos格式化做文件系统。
作完文件系统后,就可以将它挂载使用了,在/mnt下面新建文件测试,然后卸载设备,关上盖子。此时我们要是重新直接挂载/dev/vdb1,它会提醒不知道文件系统类型,无法挂载。
所以我们应该给他用加密命令加上各盖子,名字随意,然后再次挂载,就可以看到之前建立的文件了。
7.2 加密设备开机自动挂载
1) [root@server ~]# vim /etc/fstab /dev/mapper/westos /mnt xfs defaults 0 02) [root@server ~]# vim /etc/crypttab westos /dev/vdb1 /root/passfile3) [root@server ~]# vim /root/passfile 2017WESTOS4) [root@server ~]# chmod 600 /root/passfile [root@server ~]# cryptsetup luksAddKey /dev/vdb1 /root/passfile
7.3 加密的清除
1) [root@server ~]# df ##查看系统挂载点 /dev/mapper/westos 96940 5176 91764 6% /mnt [root@server ~]# umount /mnt/ ##卸载,后面加设备或者挂载点都可以2) [root@server ~]# cryptsetup close westos ##关上盖子3) [root@server ~]# mkfs.xfs /dev/vdb1 -f ##重新格式化分区为xfs文件系统4) [root@server ~]# vim /etc/fstab ##将之前写的设置删除5) [root@server ~]# vim /etc/crypttab 6) [root@server ~]# rm -rf /root/passfile ##删除之前写密码的文件
在对设备进行更改之前都要先将设备卸载下来,这里我们为什么要重新格式化文件系统呢,因为我们之前加密的文件系统不是我们在解密后可以直接用的文件系统类型。这里需要加-f去强制转换一下。后面再去编辑配置文件,将我们之前做过的一些策略删除即可。下面我们就可以正常挂载使用这个设备了。
- 页面存储管理系统
- 4.管理系统存储
- 管理系统存储
- 管理系统存储
- 管理系统存储
- 管理系统存储
- 管理系统存储
- 管理系统存储
- 分页式存储管理系统
- ARM存储管理系统MMU
- 操作系统页面存储管理系统
- 【存储管理】brk()系统调用
- 【存储管理】系统调用mmap()
- Linux系统之存储管理
- 存储管理1-分区管理,伙伴系统
- 一个记录存储管理系统的例子
- Mainframe的存储管理系统和架构
- 大数据存储和管理数据库系统
- Mac下Python使用Pip安装包错误解决
- 如何对玩家付费潜力,进行深度挖掘!
- Verilog学习笔记(二)--模块
- namp(二)
- unity Android 环境配置
- 管理系统存储
- QT之qss教程-Qt渐变色QGradient
- java程序员从笨鸟到菜鸟之(二十三)集合之List接口
- keras之一维卷积实现
- 【EXP】exp-00091解决办法
- 前几天整理的面经
- windows下lsc配置以及运行
- 【POJ】2299 Ultra-QuickSort 树状数组
- Java抽象类的使用