linux下的磁盘管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
linux下的磁盘管理
linux下磁盘是按照块(Block)来划分的,相当与windows下的簇的概念,就是一整个磁盘被分成N多个连续的小块,写数据的时候最少要用到一块,如果一块是1k的话即使数据少于1k也要用到1k的数据,如果数据很多个,并且块很大的话,就会造成很大的浪费,所以linux在格式化的时候可以自定义块的大小.有人会问,既然块大了会浪费那么直接默认的最小不好么?块越小,磁盘利用率越高,但是速度就会变慢,因为磁头在读数据的时候要不停的寻找下一个要读取的块,会造成磁盘的负担.在一些场合,例如视频文件服务器,文件比较大,要求速度较高,就可以用到较大的块.
windows 下的NTFS支持最小0.5k的簇,linux的ext3可以有1024/2048/4096(字节)几种块的大小,如果要在大只能编译内核.除了块,还有索引点的概念,分区表中记录的索引点,可以让磁头迅速的找到某个块.
磁盘管理的几个步骤:
磁盘
(fdisk -l)
↓
分区
(fdisk)
↓
格式化
(mkfs -t -c -i -b)
↓
挂载
(mount -o usrquota,grpquota)
↓
卷标
(e2label)
↓
配额
(quota)
现在来说每个步骤的详细操作:
磁盘:
刚添加一块磁盘后并不能使用和挂载,可以用命令fdisk -l,查看当前系统中存在的磁盘和磁盘状态.
分区:
然后用命令fdisk /dev/sdb对磁盘分区.(其中/dev/sdb中sdb是linux的磁盘表示方法,s代表SCSI磁盘,b是代表第2块磁盘,sda就是第一块SCSI磁盘,后面加数字代表的是分区,例如sdb1代表第二块SCSI磁盘上的第一个分区.)
进入fdisk后提示:
输入m会提示fdisk这个模式中命令列表.
Command(m for help):
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibillity flag
d delete a partition
l list known partition types
m parint this menu
n add anew 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
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
我们常用到的有:n创建新分区,d删除分区,p查看分区情况,w应用并退出,l列出所有支持的分区格式.
输入n,创建一个新分区.
Command (m for help):n
Command action
e extended
p primary partition (1-4)
p
这时候选择p为主分区,e为扩展分区.
我们输入p建立扩展分区。
Partition number (1-4):1
提示输入1-4的编号,这个就是分区的编号(因为分区表只有64B,每个分区要用16B,所以只能有4个主或扩展分区,扩展分区中可以有很多逻辑分区,编号为5以后)
First cylinder (1-512,default 1):
提示输入起始柱面,默认为1,我们直接用容量
来分会更加直观,所以这里直接回车.
Last cylinder or +size or +sizeM or +sizeK(1-512,defaule 512):
然后提示要输入主分区的大小,我们输入+100M,就是100M,可随意,但是要注意加号和M不要少了.
然后同样在次输入n->e(扩展分区)->2然后回车不输入大小,我们把剩余的空间都分到扩展分区中,在扩展分区中在创建逻辑驱动器.
扩展分区创建完后在输入n。
接下来会有一个新的提示l,就是在扩展分区中创建逻辑驱动器,根据个人需要创建几个合适大小的逻辑驱动器.
Command (m for help):n
Command action
l logical (5 or over)
p primary partition (1-4)
最后用w保存并退出fdisk模式.
格式化:
格式化的操作是针对分区而不是整个磁盘,所以要注意命令后带上分区号,如/dev/sdb1.
首先我们将sdb1格式化成ext3格式,执行命令
mkfs -t ext3 /dev/sdb1 也可以简写成 mkfs.ext3 /dev/sdb1
我们把扩展分区中的第一个逻辑驱动器sdb5(因为sdb2是扩展分区,不能直接使用,我们使用的是扩展分区中的逻辑驱动器,编号就是从5开始)格式化成块大小为1024,把sdb6格式化成块大小为4096
mkfs.ext3 -b 1024 /dev/sdb5
mkfs.ext3 -b 4096 /dev/sdb6
在这里也可以指定索引点,用-i实现,默认索引点等于块大小,如果要改变用命令
mkfs.ext3 -b 1024 -i 2048 /dev/sdb1 即可把索引点改为2048(索引点要是块的倍数,块要是扇区的倍数)
mkfs.ext3 -m2 /dev/sdb1 定义保留块为2%(默认为5%的块保留给管理员用来管理)
挂载:
在/mnt/下建立两个文件夹sdb5和sdb6
mkdir /mnt/sdb5;mkdir /mnt/sdb6
然后把/dev/sdb5和/dev/sdb6两个分区分别挂载到两个目录中
mount /dev/sdb5 /mnt/sdb5
mount /dev/sdb6 /mnt/sdb6
如果需要磁盘配额则加上参数-o让分区支持磁盘配额
mount -o usrquota,grpquota /dev/sdb5 /mnt/sdb5
mount -o usrquota,grpquota /dev/sdb6 /mnt/sdb6
如果挂载成功我们用命令mount就会看到在列表中出现了/mnt/sdb5和/mnt/sdb6
要想要此磁盘支持每次启动后生效,需要修改/etc/fstab文件让分区自动挂载并支持磁盘配额.
vi /etc/fstab 打开文件后新加一行
/dev/sdb5 /mnt/sdb5 ext3 defaults,usrquota,grpquota 0 0
/dev/sdb6 /mnt/sdb6 ext3 defaults,usrquota,grpquota 0 0
这样磁盘每次都会自动挂载到/mnt/sdb5和/mnt/sdb6上并支持磁盘配额.
卷标:
我们给/dev/sdb5加上一个卷标study,/dev/sdb6加上一个卷标game
e2label /dev/sdb5 study
e2label /dev/sdb6 game
e2label /dev/sdb5 命令查看sdb5的卷标.
配额:
首先用命令quotacheck检查磁盘并创建磁盘配额文件.
quotacheck -cugv /dev/sdb5 -c为创建 -u为用户 -g为组 -v为显示过程
quotacheck -cugva -a为所有可以使用磁盘配额功能的磁盘创
建配额文件(本例中sdb1不会创
建,因为没有使用 mount -o usrquota,grpquota)
ls /mnt/sdb5 查看会发现多了 quota.grup和er两个文件.
quotaon -a 打开磁盘配额功能.
quotaoff -a 关闭磁盘配额功能.
edquota -u tom 为TOM用户编辑磁盘配额文件,这里可以定义TOM用户可以使用的磁盘空间.
打开后可以看到支持磁盘配额的磁盘列表,前两个blocks 后面的soft和hard是软限制和硬限制磁盘使用空间(k),软限制指在超过软限制后7天内还可以继续写入数据,硬限制为不可以超过这个限制.inodes后面的soft和hard是限制文件数量.修该soft和hard下面的数值,就可以对TOM用户做出限制.
su - tom 从root用户切换到 tom 并在/mnt/sdb5和/mnt/sdb6下建立文件
然后用命令查看磁盘使用情况
quota 会看到已使用的空间,剩余空间,软限制如果超过的话会有提示(*)和天数,还有限制文件数量等信息.
磁盘管理:
tune2fs -l /dev/sdb5 会看到/dev/sdb5磁盘的详细使用情况
inode count:节点号,
Block count:块,
mount count:挂载次数,
Maximum mount count:最大挂载多少次后自检,
Last checked:上次自检时间,
check interval:自检间隔,
Reserved block count 保留块
tune2fs -c <数字> 强制多少次挂载后自检
tune2fs -i <天数> 强制自检天数
tune2fs -m <数字> 保留块的百分比(默认5%)
tune2fs -j 将ext2无损伤转换成ext3
查看块大小和磁盘配额效果实验:
查看块大小:
mkfs.ext3 -b 1024 /dev/sdb5
mkfs.ext3 -b 4096 /dev/sdb6 对两个分区格式化并定义块大小后挂载两个分区到/mnt/sdb5,/mnt/sdb6。
在/mnt/sdb5和/mnt/sdb6中分别创建文件夹dir
mkdir /mnt/sdb5/dir
mkdir /mnt/sdb6/dir
使用命令
echo "hello" >/mnt/sdb5/dir/test
echo "hello" >/mnt/sdb6/dir/test 创建两个文件,这两个文件只包含有"hello"字符,小于1k.使用命令 :
ll -h /mnt/sdb[56]/dir 可以看到sdb5用了1k,而sdb6用了4k 空间
du -h /mnt/sdb[56]/dir 可以看到sdb5用了2k,而sdb6用了8k空间,因为文件夹本身也占用了一个块.
磁盘配额:
首先把sdb5挂载到/mnt/sdb5,并支持磁盘配额(如果已挂需要先卸载)
mount -o usrquota,grpquota /dev/sdb5 /mnt/sdb5 创建一个文件夹test1
mkdir /mnt/sdb5/test1 把文件所有者改为tom 用户
chown tom /mnt/sdb5/test1 建立磁盘配额数据文件
quotacheck -cugv /dev/sdb5 打开磁盘配额功能
quotaon -a 给tom用户设置配额
edquota -u tom 修改tom用户配额文件,
空间限制 soft 1024 hard2048 文件数 soft 2 hard 4
su - tom 切换到tom用户
dd if=/dev/zero of=/mnt/sdb5/test1/file bs=1k count=1024
从/dev/zero生成一个文件/mnt/sdb5/test1/file 共有1024个块,块大小为1k,也就是复制了一个1M的文件file.
用quota查看一下.
Disk quotas for user tom (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb5 1030* 1024 2048 7days 2 2 4
说明超过了软限制会*提示,在7天只内还可以继续使用,但不能超过硬限制.
再次复制一个1M的文件file1
dd if=/dev/zero of=/mnt/sdb5/test1/file1 bs=1k count=1024
用quota查看
Disk quotas for user tom (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/sdb5 2048* 1024 2048 3* 2 4 7days
说明文件的大小已达到最大,文件的数量超过了软限制,7天后将不能写入.
再次复制一个1M的文件file2
dd if=/dev/zero of=/mnt/sdb5/test1/file2 bs=1k count=1024
发现生成的只是一个空文件,因为已经没有可以使用的空间了.