[Linux] Disk management

Linux磁盘管理

I/O Ports: I/O设备地址;

一切皆文件:

open(), read(), write(), close()

块设备:block,存取单位“块”,磁盘

字符设备:char,存取单位“字符”,键盘

设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信;

设备号码:

主设备号:major number, 标识设备类型

次设备号:minor number, 标识同一类型下的不同设备

硬盘接口类型:

并行:

IDE:133MB/s

SCSI:640MB/s

串口:

SATA:6Gbps

SAS:6Gbps

USB:480MB/s

rpm: rotations per minute

/dev/DEV_FILE

磁盘设备的设备文件命名:

IDE: /dev/hd

SCSI, SATA, SAS, USB: /dev/sd

不同设备:a-z

/dev/sda, /dev/sdb, ...

同一设备上的不同分区:1,2, ...

/dev/sda1, /dev/sda5

机械式硬盘:

track:磁道

cylinder: 柱面

secotr: 扇区

512bytes

如何分区:

按柱面

0磁道0扇区:512bytes

MBR: Master Boot Record

446bytes: boot loader

64bytes:分区表

16bytes: 标识一个分区

2bytes: 55AA

4个主分区;

3主分区+1扩展(N个逻辑分区)

逻辑分区

问题:UEFI, GPT?

分区管理工具:fdisk, parted, sfdisk

fdisk:对于一块硬盘来讲,最多只能管理15分区;

# fdisk -l [-u] [device...]

# fdisk device

子命令:管理功能

p: print, 显示已有分区;

n: new, 创建

d: delete, 删除

w: write, 写入磁盘并退出

q: quit, 放弃更新并退出

m: 获取帮助

l: 列表所分区id

t: 调整分区id

查看内核是否已经识别新的分区:

# cat /proc/partations

通知内核重新读取硬盘分区表:

partx -a /dev/DEVICE

-n M:N

kpartx -a /dev/DEVICE

-f: force

CentOS 5: 使用partprobe

partprobe [/dev/DEVICE]

Linux文件系统管理:

Linux文件系统: ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, swap

swap: 交换分区

光盘:iso9660

Windows:fat32, ntfs

Unix: FFS, UFS, JFS2

网络文件系统:NFS, CIFS

集群文件系统:GFS2, OCFS2

分布式文件系统:ceph,

moosefs, mogilefs, GlusterFS, Lustre

根据其是否支持"journal"功能:

日志型文件系统: ext3, ext4, xfs, ...

非日志型文件系统: ext2, vfat

文件系统的组成部分:

内核中的模块:ext4, xfs, vfat

用户空间的管理工具:mkfs.ext4, mkfs.xfs, mkfs.vfat

Linux的虚拟文件系统:VFS

创建文件系统:

mkfs命令:

(1) # mkfs.FS_TYPE /dev/DEVICE

ext4

xfs

btrfs

vfat

(2) # mkfs -t FS_TYPE /dev/DEVICE

-L ‘LABEL‘: 设定卷标

mke2fs:ext系列文件系统专用管理工具

-t {ext2|ext3|ext4}

-b {1024|2048|4096}

-L ‘LABEL‘

-j: 相当于 -t ext3

mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3

-i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小;

-N #:为数据空间创建个多少个inode;

-m #: 为管理人员预留的空间占据的百分比;

-O FEATURE[,...]:启用指定特性

-O ^FEATURE:关闭指定特性

mkswap:创建交换分区

mkswap [options] device

-L ‘LABEL‘

前提:调整其分区的ID为82;

其它常用工具:

blkid:块设备属性信息查看

blkid [OPTION]... [DEVICE]

-U UUID: 根据指定的UUID来查找对应的设备

-L LABEL:根据指定的LABEL来查找对应的设备

e2label:管理ext系列文件系统的LABEL

# e2label DEVICE [LABEL]

tune2fs:重新设定ext系列文件系统可调整参数的值

-l:查看指定文件系统超级块信息;super block

-L ‘LABEL‘:修改卷标

-m #:修预留给管理员的空间百分比

-j: 将ext2升级为ext3

-O: 文件系统属性启用或禁用

-o: 调整文件系统的默认挂载选项

-U UUID: 修改UUID号;

dumpe2fs:

-h:查看超级块信息

文件系统检测:

fsck: File System CheCk

fsck.FS_TYPE

fsck -t FS_TYPE

-a: 自动修复错误

-r: 交互式修复错误

Note: FS_TYPE一定要与分区上已经文件类型相同;

e2fsck:ext系列文件专用的检测修复工具

-y:自动回答为yes;

-f:强制修复;

vfs: xfs, ext{2|3|4}, btrfs

文件系统管理:

将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为称之为挂载;

解除此关联关系的过程称之为卸载;

把设备关联挂载点:Mount Point

mount

卸载时:可使用设备,也可以使用挂载点

umount

注意:挂载点下原有文件在挂载完成后会被临时隐藏;

挂载方法:mount DEVICE MOUNT_POINT

mount:通过查看/etc/mtab文件显示当前系统已挂载的所有设备

mount [-fnrsvw] [-t vfstype] [-o options] device dir

device:指明要挂载的设备;

(1) 设备文件:例如/dev/sda5

(2) 卷标:-L ‘LABEL‘, 例如 -L ‘MYDATA‘

(3) UUID, -U ‘UUID‘:例如 -U ‘0c50523c-43f1-45e7-85c0-a126711d406e‘

(4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs

dir:挂载点

事先存在;建议使用空目录;

进程正在使用中的设备无法被卸载;

常用命令选项:

-t vsftype:指定要挂载的设备上的文件系统类型;

-r: readonly,只读挂载;

-w: read and write, 读写挂载;

-n: 不更新/etc/mtab;

-a:自动挂载所有支持自动挂载的设备;(定义在了/etc/fstab文件中,且挂载选项中有“自动挂载”功能)

-L ‘LABEL‘: 以卷标指定挂载设备;

-U ‘UUID‘: 以UUID指定要挂载的设备;

-B, --bind: 绑定目录到另一个目录上;

注意:查看内核追踪到的已挂载的所有设备:cat /proc/mounts

-o options:(挂载文件系统的选项)

async:异步模式;

sync:同步模式;

atime/noatime:包含目录和文件;

diratime/nodiratime:目录的访问时间戳

auto/noauto:是否支持自动挂载

exec/noexec:是否支持将文件系统上应用程序运行为进程

dev/nodev:是否支持在此文件系统上使用设备文件;

suid/nosuid:

remount:重新挂载

ro:

rw:

user/nouser:是否允许普通用户挂载此设备

acl:启用此文件系统上的acl功能

注意:上述选项可多个同时使用,彼此使用逗号分隔;

默认挂载选项:defaults

rw, suid, dev, exec, auto, nouser, and async

卸载命令:

# umount DEVICE

# umount MOUNT_POINT

查看正在访问指定文件系统的进程:

# fuser -v MOUNT_POINT

终止所有在正访问指定的文件系统的进程:

# fuser -km MOUNT_POINT

挂载交换分区:

启用:swapon

swapon [OPTION]... [DEVICE]

-a:激活所有的交换分区;

-p PRIORITY:指定优先级;

禁用:swapoff [OPTION]... [DEVICE]

内存空间使用状态:

free [OPTION]

-m: 以MB为单位

-g: 以GB为单位

文件系统空间占用等信息的查看工具:

df:

-h: human-readable

-i:inodes instead of blocks

-P: 以Posix兼容的格式输出;

查看某目录总体空间占用状态:

du:

du [OPTION]... DIR

-h: human-readable

-s: summary

命令总结:mount, umount, free, df, du, swapon, swapoff, fuser

文件挂载的配置文件:/etc/fstab

每行定义一个要挂载的文件系统;

要挂载的设备或伪文件系统 挂载点 文件系统类型   挂载选项 转储频率   自检次序

要挂载的设备或伪文件系统:

设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc, sysfs)

挂载选项:

defaults

转储频率:

0:不做备份

1:每天转储

2:每隔一天转储

自检次序:

0:不自检

1:首先自检;一般只有rootfs才用1;

...

文件系统上的其它概念:

Inode: Index Node, 索引节点

地址指针:

直接指针:

间接指针:

三级指针:

inode bitmap:对位标识每个inode空闲与否的状态信息;

链接文件:

硬链接:

不能够对目录进行;

不能跨分区进行;

指向同一个inode的多个不同路径;创建文件的硬链接即为为inode创建新的引用路径,因此会增加其引用计数;

符号链接:

可以对目录进行;

可以跨分区;

指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数;

ln [-sv] SRC DEST

-s:symbolic link

-v: verbose

文件管理操作对文件的影响:

文件删除:

文件复制:

文件移动:

练习:

1、创建一个20G的文件系统,块大小为2048,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/testing目录,且默认有acl挂载选项;

(1) 创建20G分区;

(2) 格式化:

mke2fs -t ext4 -b 2048 -L ‘TEST‘ /dev/DEVICE

(3) 编辑/etc/fstab文件

LABEL=‘TEST‘ /testing ext4 defaults,acl 0 0

2、创建一个5G的文件系统,卷标HUGE,要求此分区开机自动挂载至/mogdata目录,文件系统类型为ext3;

3、写一个脚本,完成如下功能:

(1) 列出当前系统识别到的所有磁盘设备;

(2) 如磁盘数量为1,则显示其空间使用信息;

否则,则显示最后一个磁盘上的空间使用信息;

if [ $disks -eq 1 ]; then

fdisk -l /dev/[hs]da

else

fdisk -l $(fdisk -l /dev/[sh]d[a-z] | grep -o "^Disk /dev/[sh]d[a-]" | tail -1 | cut -d‘ ‘ -f2)

fi

RAID:

Redundant Arrays of Inexpensive Disks

Independent

Berkeley: A case for Redundent Arrays of Inexpensive Disks RAID

提高IO能力:

磁盘并行读写;

提高耐用性;

磁盘冗余来实现

级别:多块磁盘组织在一起的工作方式有所不同;

RAID实现的方式:

外接式磁盘阵列:通过扩展卡提供适配能力

内接式RAID:主板集成RAID控制器

Software RAID:

级别:level

RAID-0:0, 条带卷,strip;

RAID-1: 1, 镜像卷,mirror;

RAID-2

..

RAID-5:

RAID-6

RAID10

RAID01

RAID-0:

读、写性能提升;

可用空间:N*min(S1,S2,...)

无容错能力

最少磁盘数:2, 2+

RAID-1:

读性能提升、写性能略有下降;

可用空间:1*min(S1,S2,...)

有冗余能力

最少磁盘数:2, 2+

RAID-4:

1101, 0110, 1011

RAID-5:

读、写性能提升

可用空间:(N-1)*min(S1,S2,...)

有容错能力:1块磁盘

最少磁盘数:3, 3+

RAID-6:

读、写性能提升

可用空间:(N-2)*min(S1,S2,...)

有容错能力:2块磁盘

最少磁盘数:4, 4+

混合类型

RAID-10:

读、写性能提升

可用空间:N*min(S1,S2,...)/2

有容错能力:每组镜像最多只能坏一块;

最少磁盘数:4, 4+

RAID-01:

RAID-50、RAID7

JBOD:Just a Bunch Of Disks

功能:将多块磁盘的空间合并一个大的连续空间使用;

可用空间:sum(S1,S2,...)

常用级别:RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD

实现方式:

硬件实现方式

软件实现方式

CentOS 6上的软件RAID的实现:

结合内核中的md(multi devices)

mdadm:模式化的工具

命令的语法格式:mdadm [mode] <raiddevice> [options] <component-devices>

支持的RAID级别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10;

模式:

创建:-C

装配: -A

监控: -F

管理:-f, -r, -a

<raiddevice>: /dev/md#

<component-devices>: 任意块设备

-C: 创建模式

-n #: 使用#个块设备来创建此RAID;

-l #:指明要创建的RAID的级别;

-a {yes|no}:自动创建目标RAID设备的设备文件;

-c CHUNK_SIZE: 指明块大小;

-x #: 指明空闲盘的个数;

例如:创建一个10G可用空间的RAID5;

-D:显示raid的详细信息;

mdadm -D /dev/md#

管理模式:

-f: 标记指定磁盘为损坏;

-a: 添加磁盘

-r: 移除磁盘

观察md的状态:

cat /proc/mdstat

停止md设备:

mdadm -S /dev/md#

watch命令:

-n #: 刷新间隔,单位是秒;

watch -n# ‘COMMAND‘

练习1:创建一个可用空间为10G的RAID1设备,要求其chunk大小为128k,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录;

练习2:创建一个可用空间为10G的RAID10设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录;

博客作业:raid各级别特性;

LVM2:

LVM: Logical Volume Manager, Version: 2

dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块;

/dev/dm-#

/dev/mapper/VG_NAME-LV_NAME

/dev/mapper/vol0-root

/dev/VG_NAME/LV_NAME

/dev/vol0/root

pv管理工具:

pvs:简要pv信息显示

pvdisplay:显示pv的详细信息

pvcreate /dev/DEVICE: 创建pv

vg管理工具:

vgs

vgdisplay

vgcreate  [-s #[kKmMgGtTpPeE]] VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]

vgextend  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]

vgreduce  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]

先做pvmove

vgremove

lv管理工具:

lvs

lvdisplay

lvcreate -L #[mMgGtT] -n NAME VolumeGroup

lvremove /dev/VG_NAME/LV_NAME

扩展逻辑卷:

# lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME

# resize2fs /dev/VG_NAME/LV_NAME

缩减逻辑卷:

# umount /dev/VG_NAME/LV_NAME

# e2fsck -f /dev/VG_NAME/LV_NAME

# resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]

# lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME

# mount

快照:snapshot

lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name

练习1:创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录;

练习2: 新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录;

练习3:扩展testlv至7G,要求archlinux用户的文件不能丢失;

练习4:收缩testlv至3G,要求archlinux用户的文件不能丢失;

练习5:对testlv创建快照,并尝试基于快照备份数据,验正快照的功能;

文件系统挂载使用:

挂载光盘设备:

光盘设备文件:

IDE: /dev/hdc

SATA: /dev/sr0

符号链接文件:

/dev/cdrom

/dev/cdrw

/dev/dvd

/dev/dvdrw

mount -r /dev/cdrom /media/cdrom

umount /dev/cdrom

dd命令:convert and copy a file

用法:

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

bs=#:block size, 复制单元大小;

count=#:复制多少个bs;

磁盘拷贝:

dd if=/dev/sda of=/dev/sdb

备份MBR

dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

破坏MBR中的bootloader:

dd if=/dev/zero of=/dev/sda bs=256 count=1

两个特殊设备:

/dev/null: 数据黑洞;

/dev/zero:吐零机;

博客作业:lvm基本应用,扩展及缩减实现;

回顾:lvm2, dd

lvm: 边界动态扩展或收缩;快照;

pv --> vg --> lv

PE:

LE:

dd: 复制

btrfs文件系统:

技术预览版

Btrfs (B-tree, Butter FS, Better FS), GPL, Oracle, 2007, CoW;

ext3/ext4, xfs

核心特性:

多物理卷支持:btrfs可由多个底层物理卷组成;支持RAID,以联机“添加”、“移除”,“修改”;

写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新;

数据及元数据校验码:checksum

子卷:sub_volume

快照:支持快照的快照;

透明压缩:

文件系统创建:

mkfs.btrfs

-L ‘LABEL‘

-d <type>: raid0, raid1, raid5, raid6, raid10, single

-m <profile>: raid0, raid1, raid5, raid6, raid10, single, dup

-O <feature>

-O list-all: 列出支持的所有feature;

属性查看:

btrfs filesystem show

挂载文件系统:

mount -t btrfs /dev/sdb MOUNT_POINT

透明压缩机制:

mount -o compress={lzo|zlib} DEVICE MOUNT_POINT

子命令:filesystem, device, balance, subvolume

时间: 08-29

[Linux] Disk management的相关文章

Better Linux Disk Caching &amp; Performance with vm.dirty_ratio &amp; vm.dirty_background_ratio

In previous posts on vm.swappiness and using RAM disks we talked about how the memory on a Linux guest is used for the OS itself (the kernel, buffers, etc.), applications, and also for file cache. File caching is an important performance improvement,

如何展开Linux Memory Management学习?

Linux的进程和内存是两座大山,没有翻过这两座大山对于内核的理解始终是不完整的. 关于Linux内存管理,在开始之前做些准备工作. 首先bing到了Quora的<How can one really learn Linux Kernel Memory Management?>,这也是大部分初学者,或者说大部分Linux内核开发人员的疑问? 正如Vaishali Thakkar所说,最好的方法是读代码,但是面对这么庞杂的代码,往往是无从下手.Vaishali Thakkar推荐从LSF/MM论

Linux Network Management

Linux网络管理 (YouTube视频教程) ISO/OSI七层模型 ISO: The International Organization for Standardization 国际标准化组织 OSI: Open Systems Interconnection model 开放系统互连模型 MAC地址负责局域网通信,IP地址负责外网通信 文件传输端口(FTP端口)默认21 Www网页端口默认80 Mail邮件默认端口是25和110 ISO/OSI七层模型是理论基础,TCP/IP四层模型是优

Linux Process Management &amp;&amp; Process Scheduling Principle

目录 1. 引言 2. 进程优先级 3. 进程的生命周 4. 进程表示 5. 进程管理相关的系统调用 6. 进程调度 7. 完全公平调度类 8. 实时调度类 9. 调度器增强 10. 小结 1. 引言 在多处理器系统中,可以真正并行运行的进程数目,取决于物理CPU的数目内核和处理器建立了多任务的"错觉",即可以并行做几种操作,这是通过以很短的间隔在系统运行的应用程序之间不停切换而做到的,这种系统管理方式引发了几个内核必须解决的问题 1. 除非明确地要求,否则应用程序不能彼此干扰,例如

一款功能强悍的web磁盘管理工具 (A powerful web disk management tools)

https://github.com/kingAnyWHere/web-ftp web-ftp 快捷操作 alt + o 打开文件夹 alt + n 新建文件夹 alt + m 配置web-ftp alt + w / alt + x 关闭文件夹 alt + d 选中该路径 ctrl + a 全选 ctrl + c 复制 ctrl + x 剪切 ctrl + v 粘贴 (也可粘贴截图) ctrl + z / backspace 历史后退 ctrl + y 历史前进 ctrl + alt + f 自

linux process management

CREAT PROCESS fork() | clone(參数,决定父子函数的共享内容) | do_fork() | copy_process() | dup_task_struct() 创建子进程的内核堆栈.复制父进程的进程描写叙述符(task_struct) 进程描写叙述符的非常多成员被清除或者设为初值 设置子进程的状态task_struct-->state 设置子进程的权限task_struct-->flags 设置子进程的进程号task_struct-->PID 依据clone的

Linux下Power Management开发总结

本文作为一个提纲挈领的介绍性文档,后面会以此展开,逐渐丰富. 关于Linux省电: 保持CPU处于工作状态时: 1. 设备使能RPM,不使用的设备动态关闭. 2. cpufreq动态调节CPU/GPU的频率电压,以达到降低功耗的目的. 3. cpuidle让CPU进入idle状态,或者深睡. 4. cpu hotplug对不使用的CPU进行动态热插拔. CPU进入睡眠状态: 1. suspend,如果整个系统无事可干进入suspend,包括两种suspend idle和suspend to ra

Linux内核 Documentation下的00-INDEX文档翻译

This is a brief list of all the files in ./linux/Documentation and what they contain. If you add a documentation file, please list it here in alphabetical order as well, or risk being hunted down like a rabid dog. Please try and keep the descriptions

Linux procfs详解

1.0 proc文件系统总览在类Unix系统中体现了一种良好的抽象哲学,就是几乎所有的数据实体都被抽象成一个统一的接口--文件来看待,这样我们就可以用一些简单的基本工具完成大量复杂的操作.在Linux中存在着一类特殊的伪文件系统,用于使用与文件接口统一的操作来完成各种功能,例如ptyfs.devfs.sysfs和procfs.而procfs就是其中应用最广泛的一种伪文件系统.procfs是Linux内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为常规文件映射到一个目录树中,这样我们就