单机大话战国单机版gm指令怎么用?

人像蚂蚁一样忙碌的搬运着。我却像一只茫然的蚂蚁,搬走了眼泪,搬走了憧憬与期待,搬走了青春年华的誓言。 在这个浮躁的世界里,我在这里记录我成长的脚印!
( Tue, 2 Aug 2011 22:09:49 +0800 )
Description:
简单看了一下这篇文章,对其中一些机制的实现还不是很明白,还需要研究,在此做个记号。
文件系统似乎是内核中比较稳定的部分,多年来,人们一直使用 ext2/3,ext 文件系统以其卓越的稳定性成为了事实上的 Linux 标准文件系统。近年来 ext2/3 暴露出了一些扩展性问题,于是便催生了 ext4 。在 2008 年发布的 Linux2.6.19 内核中集成了 ext4 的 dev 版本。 2.6.28 内核发布时,ext4 结束了开发版,开始接受用户的使用。似乎 ext 就将成为 Linux 文件系统的代名词。然而当您阅读很多有关 ext4 的文章时,会发现都不约而同地提到了 btrfs,并认为 ext4 将是一个过渡的文件系统。 ext4 的作者 Theodore Tso 也盛赞 btrfs 并认为 btrfs 将成为下一代 Linux 标准文件系统。 Oracle,IBM, Intel 等厂商也对 btrfs 表现出了极大的关注,投入了资金和人力。为什么 btrfs 如此受人瞩目呢。这便是本文首先想探讨的问题。
Kevin Bowling[1] 有一篇介绍各种文件系统的文章,在他看来,ext2/3 等文件系统属于“古典时期”。文件系统的新时代是 2005 年由 Sun 公司的 ZFS 开创的。 ZFS 代表” last word in file system ”,意思是此后再也不需要开发其他的文件系统了。 ZFS 的确带来了很多崭新的观念,对文件系统来讲是一个划时代的作品。
如果您比较 btrfs 的特性,将会发现 btrfs 和 ZFS 非常类似。也许我们可以认为 btrfs 就是 Linux 社区对 ZFS 所作出的回应。从此往后在 Linux 中也终于有了一个可以和 ZFS 相媲美的文件系统。
您可以在 btrfs 的主页上 [2] 看到 btrfs 的特性列表。我自作主张,将那张列表分成了四大部分。
首先是扩展性 (scalability) 相关的特性,btrfs 最重要的设计目标是应对大型机器对文件系统的扩展性要求。 Extent,B-Tree 和动态 inode 创建等特性保证了 btrfs 在大型机器上仍有卓越的表现,其整体性能而不会随着系统容量的增加而降低。
其次是数据一致性 (data integrity) 相关的特性。系统面临不可预料的硬件故障,Btrfs 采用 COW 事务技术来保证文件系统的一致性。 btrfs 还支持 checksum,避免了 silent corrupt 的出现。而传统文件系统则无法做到这一点。
第三是和多设备管理相关的特性。 Btrfs 支持创建快照 ( a hot),和克隆 (clone) 。 btrfs 还能够方便的管理多个物理设备,使得传统的卷管理软件变得多余。
最后是其他难以归类的特性。这些特性都是比较先进的技术,能够显著提高文件系统的时间 / 空间性能,包括延迟分配,小文件的存储优化,目录索引等。
官方的特性列表:
The main Btrfs features include:
Extent based file storage (2^64 max file size)
Space efficient packing of small files
Space efficient indexed directories
Dynamic inode allocation
Writable a hots
Subvolumes (separate internal filesystem roots)
Object level mirroring and striping
Checksums on data and metadata (multiple algorithms available)
Compre ion
Integrated multiple device su ort, with several raid algorithms
Online filesystem check
Very fast offline filesystem check
Efficient incremental backup and FS mirroring
Online filesystem defragmentation
Currently the code is in an early implementation phase, and not all of these have yet been implemented. See the
for detailed release pla .
btrfs 文件系统中所有的 metadata 都由 BTree 管理。使用 BTree 的主要好处在于查找,插入和删除操作都很高效。可以说 BTree 是 btrfs 的核心。
一味地夸耀 BTree 很好很高效也许并不能让人信服,但假如稍微花费一点儿时间看看 ext2/3 中元数据管理的实现方式,便可以反衬出 BTree 的优点。
妨碍 ext2/3 扩展性的一个问题来自其目录的组织方式。目录是一种特殊的文件,在 ext2/3 中其内容是一张线性表格。如图 1-1 所示 [6]:
图 1 展示了一个 ext2 目录文件的内容,该目录中包含四个文件。分别是 "home1","usr","oldfile" 和 " in" 。如果需要在该目录中查找目录 in,ext2 将遍历前三项,直至找到 in 这个字符串为止。
这种结构在文件个数有限的情况下是比较直观的设计,但随着目录下文件数的增加,查找文件的时间将线性增长。 2003 年,ext3 设计者开发了目录索引技术,解决了这个问题。目录索引使用的数据结构就是 BTree 。如果同一目录下的文件数超过 2K,inode 中的 i_data 域指向一个特殊的 block 。在该 block 中存储着目录索引 BTree 。 BTree 的查找效率高于线性表,
但为同一个元数据设计两种数据结构总是不太优雅。在文件系统中还有很多其他的元数据,用统一的 BTree 管理是非常简单而优美的设计。
Btrfs 内部所有的元数据都采用 BTree 管理,拥有良好的可扩展性。 btrfs 内部不同的元数据由不同的 Tree 管理。在 superblock 中,有指针指向这些 BTree 的根。如图 2 所示:
FS Tree 管理文件相关的元数据,如 inode,dir 等; Chunk tree 管理设备,每一个磁盘设备都在 Chunk Tree 中有一个 item ; Extent Tree 管理磁盘空间分配,btrfs 每分配一段磁盘空间,便将该磁盘空间的信息插入到 Extent tree 。查询 Extent Tree 将得到空闲的磁盘空间信息; Tree of tree root 保存很多 BTree 的根节点。比如用户每建立一个快照,btrfs 便会创建一个 FS Tree 。为了管理所有的树,btrfs 采用 Tree of tree root 来保存所有树的根节点; checksum Tree 保存数据块的校验和。
基于 Extent 的文件存储
现代很多文件系统都采用了 extent 替代 block 来管理磁盘。 Extent 就是一些连续的 block,一个 extent 由起始的 block 加上长度进行定义。
Extent 能有效地减少元数据开销。为了进一步理解这个问题,我们还是看看 ext2 中的反面例子。
ext2/3 以 block 为基本单位,将磁盘划分为多个 block 。为了管理磁盘空间,文件系统需要知道哪些 block 是空闲的。 Ext 使用 bitmap 来达到这个目的。 Bitmap 中的每一个 bit 对应磁盘上的一个 block,当相应 block 被分配后,bitmap 中的相应 bit 被设置为 1 。这是很经典也很清晰的一个设计,但不幸的是当磁盘容量变大时,bitmap 自身所占用的空间也将变大。这就导致了扩展性问题,随着存储设备容量的增加,bitmap 这个元数据所占用的空间也随之增加。而人们希望无论磁盘容量如何增加,元数据不应该随之线形增加,这样的设计才具有可扩展性。
下图比较了 block 和 extent 的区别:
在 ext2/3 中,10 个 block 需要 10 个 bit 来表示;在 btrfs 中则只需要一个元数据。对于大文件,extent 表现出了更加优异的管理性能。
Extent 是 btrfs 管理磁盘空间的最小单位,由 extent tree 管理。 Btrfs 分配 data 或 metadata 都需要查询 extent tree 以便获得空闲空间的信息。
动态 inode 分配
为了理解动态 inode 分配,还是需要借助 ext2/3 。下表列举了 ext2 文件系统的限制:
最大文件数量
文件系统空间大小 V / 8192
比如 100G 大小的文件系统中,能创建的文件个数最大为 131072
图 4 显示了 ext2 的磁盘布局:
在 ext2 中 inode 区是被预先固定分配的,且大小固定,比如一个 100G 的分区中,inode table 区中只能存放 131072 个 inode,这就意味着不可能创建超过 131072 个文件,因为每一个文件都必须有一个唯一的 inode 。
为了解决这个问题,必须动态分配 inode 。每一个 inode 只是 BTree 中的一个节点,用户可以无限制地任意插入新的 inode,其物理存储位置是动态分配的。所以 btrfs 没有对文件个数的限制。
针对 SSD 的优化支持
SSD 是固态存储 Solid State Disk 的简称。在过去的几十年中,CPU/RAM 等器件的发展始终遵循着摩尔定律,但硬盘 HDD 的读写速率却始终没有飞跃式的发展。磁盘 IO 始终是系统性能的瓶颈。
SSD 采用 flash memory 技术,内部没有磁盘磁头等机械装置,读写速率大幅度提升。 flash memory 有一些不同于 HDD 的特性。 flash 在写数据之前必须先执行擦除操作;其次,flash 对擦除操作的次数有一定的限制,在目前的技术水平下,对同一个数据单元最多能进行约 100 万次擦除操作,因此,为了延长 flash 的寿命,应该将写操作平均到整个 flash 上。
SSD 在硬件内部的微代码中实现了 wear leveling 等分布写操作的技术,因此系统无须再使用特殊的 MTD 驱动和 FTL 层。虽然 SSD 在硬件层面做了很多努力,但毕竟还是有限。文件系统针对 SSD 的特性做优化不仅能提高 SSD 的使用寿命,而且能提高读写性能。 Btrfs 是少数专门对 SSD 进行优化的文件系统。 btrfs 用户可以使用 mount 参数打开对 SSD 的特殊优化处理。
Btrfs 的 COW 技术从根本上避免了对同一个物理单元的反复写操作。如果用户打开了 SSD 优化选项,btrfs 将在底层的块空间分配策略上进行优化:将多次磁盘空间分配请求聚合成一个大小为 2M 的连续的块。大块连续地址的 IO 能够让固化在 SSD 内部的微代码更好的进行读写优化,从而提高 IO 性能。
COW 事务
理解 COW 事务,必须首先理解 COW 和事务这两个术语。
什么是 COW?
所谓 COW,即每次写磁盘数据时,先将更新数据写入一个新的 block,当新数据写入成功之后,再更新相关的数据结构指向新 block 。
什么是事务?
COW 只能保证单一数据更新的原子性。但文件系统中很多操作需要更新多个不同的元数据,比如创建文件需要修改以下这些元数据:
修改 extent tree,分配一段磁盘空间
创建一个新的 inode,并插入 FS Tree 中
增加一个目录项,插入到 FS Tree 中
任何一个步骤出错,文件便不能创建成功,因此可以定义为一个事务。
下面将演示一个 COW 事务。
A 是 FS Tree 的根节点,新的 inode 的信息将被插入节点 C 。首先,btrfs 将 inode 插入一个新分配的 block C ’中,并修改上层节点 B,使其指向新的 block C ’;修改 B 也将引发 COW,以此类推,引发一个连锁反应,直到最顶层的 Root A 。当整个过程结束后,新节点 A ’变成了 FS Tree 的根。但此时事务并未结束,superblock 依然指向 A 。
接下来,修改目录项(E 节点),同样引发这一过程,从而生成新的根节点 A ’’。
此时,inode 和目录项都已经写入磁盘,可以认为事务已经结束。 btrfs 修改 superblock,使其指向 A ’’,如下图所示:
COW 事务能够保证文件系统的一致性,并且系统 Reboot 之后不需要执行 fsck 。因为 superblock 要么指向新的 A ’’,要么指向 A,无论哪个都是一致的数据。
Checksum
Checksum 技术保证了数据的可靠性,避免 silent corruption 现象。由于硬件原因,从磁盘上读出的数据会出错。比如 block A 中存放的数据为 0x55,但读取出来的数据变是 0x54,因为读取操作并未报错,所以这种错误不能被上层软件所察觉。
解决这个问题的方法是保存数据的校验和,在读取数据后检查校验和。如果不符合,便知道数据出现了错误。
ext2/3 没有校验和,对磁盘完全信任。而不幸的是,磁盘的错误始终存在,不仅发生在廉价的 IDE 硬盘上,昂贵的 RAID 也存在 silent corruption 问题。而且随着存储网络的发展,即使数据从磁盘读出正确,也很难确保能够安全地穿越网络设备。
btrfs 在读取数据的同时会读取其相应的 checksum 。如果最终从磁盘读取出来的数据和 checksum 不相同,btrfs 会首先尝试读取数据的镜像备份,如果数据没有镜像备份,btrfs 将返回错误。写入磁盘数据之前,btrfs 计算数据的 checksum 。然后将 checksum 和数据同时写入磁盘。
Btrfs 采用单独的 checksum Tree 来管理数据块的校验和,把 checksum 和 checksum 所保护的数据块分离开,从而提供了更严格的保护。假如在每个数据 block 的 header 中加入一个域保存 checksum,那么这个数据 block 就成为一个自己保护自己的结构。这种结构下有一种错误无法检测出来,比如本来文件系统打算从磁盘上读 block A,但返回了 block B,由于 checksum 在 block 内部,因此 checksum 依旧是正确的。 btrfs 采用 checksum tree 来保存数据块的 checksum,避免了上述问题。
Btrfs 采用 crc32 算法计算 checksum,在将来的开发中会支持其他类型的校验算法。为了提高效率,btrfs 将写数据和 checksum 的工作分别用不同的内核线程并行执行。
每个 Unix 管理员都曾面临为用户和各种应用分配磁盘空间的任务。多数情况下,人们无法事先准确地估计一个用户或者应用在未来究竟需要多少磁盘空间。磁盘空间被用尽的情况经常发生,此时人们不得不试图增加文件系统空间。传统的 ext2/3 无法应付这种需求。
很多卷管理软件被设计出来满足用户对多设备管理的需求,比如 LVM 。 Btrfs 集成了卷管理软件的功能,一方面简化了用户命令;另一方面提高了效率。
多设备管理
Btrfs 支持动态添加设备。用户在系统中增加新的磁盘之后,可以使用 btrfs 的命令将该设备添加到文件系统中。
为了灵活利用设备空间,Btrfs 将磁盘空间划分为多个 chunk 。每个 chunk 可以使用不同的磁盘空间分配策略。比如某些 chunk 只存放 metadata,某些 chunk 只存放数据。一些 chunk 可以配置为 mirror,而另一些 chunk 则可以配置为 stripe 。这为用户提供了非常灵活的配置可能性。
Subvolume
Subvolume 是很优雅的一个概念。即把文件系统的一部分配置为一个完整的子文件系统,称之为 subvolume 。
采用 subvolume,一个大的文件系统可以被划分为多个子文件系统,这些子文件系统共享底层的设备空间,在需要磁盘空间时便从底层设备中分配,类似应用程序调用 malloc() 分配内存一样。可以称之为存储池。这种模型有很多优点,比如可以充分利用 disk 的带宽,可以简化磁盘空间的管理等。
所谓充分利用 disk 的带宽,指文件系统可以并行读写底层的多个 disk,这是因为每个文件系统都可以访问所有的 disk 。传统的文件系统不能共享底层的 disk 设备,无论是物理的还是逻辑的,因此无法做到并行读写。
所谓简化管理,是相对于 LVM 等卷管理软件而言。采用存储池模型,每个文件系统的大小都可以自动调节。而使用 LVM,如果一个文件系统的空间不够了,该文件系统并不能自动使用其他磁盘设备上的空闲空间,而必须使用 LVM 的管理命令手动调节。
Subvolume 可以作为根目录挂载到任意 mount 点。 subvolume 是非常有趣的一个特性,有很多应用。
假如管理员只希望某些用户访问文件系统的一部分,比如希望用户只能访问 /var/test/ 下面的所有内容,而不能访问 /var/ 下面其他的内容。那么便可以将 /var/test 做成一个 subvolume 。 /var/test 这个 subvolume 便是一个完整的文件系统,可以用 mount 命令挂载。比如挂载到 /test 目录下,给用户访问 /test 的权限,那么用户便只能访问 /var/test 下面的内容了。
快照和克隆
快照是对文件系统某一时刻的完全备份。建立快照之后,对文件系统的修改不会影响快照中的内容。这是非常有用的一种技术。
比如数据库备份。假如在时间点 T1,管理员决定对数据库进行备份,那么他必须先停止数据库。备份文件是非常耗时的操作,假如在备份过程中某个应用程序修改了数据库的内容,那么将无法得到一个一致性的备份。因此在备份过程中数据库服务必须停止,对于某些关键应用这是不能允许的。
利用快照,管理员可以在时间点 T1 将数据库停止,对系统建立一个快照。这个过程一般只需要几秒钟,然后就可以立即重新恢复数据库服务。此后在任何时候,管理员都可以对快照的内容进行备份操作,而此时用户对数据库的修改不会影响快照中的内容。当备份完成,管理员便可以删除快照,释放磁盘空间。
快照一般是只读的,当系统支持可写快照,那么这种可写快照便被称为克隆。克隆技术也有很多应用。比如在一个系统中***好基本的软件,然后为不同的用户做不同的克隆,每个用户使用自己的克隆而不会影响其他用户的磁盘空间。非常类似于虚拟机。
Btrfs 支持 a hot 和 clone 。这个特性极大地增加了 btrfs 的使用范围,用户不需要购买和***昂贵并且使用复杂的卷管理软件。下面简要介绍一下 btrfs 实现快照的基本原理。
如前所述 Btrfs 采用 COW 事务技术,从图 1-10 可以看到,COW 事务结束后,如果不删除原来的节点 A,C,E,那么 A,C,E,D,F 依然完整的表示着事务开始之前的文件系统。这就是 a hot 实现的基本原理。
Btrfs 采用引用计数决定是否在事务 commit 之后删除原有节点。对每一个节点,btrfs 维护一个引用计数。当该节点被别的节点引用时,该计数加一,当该节点不再被别的节点引用时,该计数减一。当引用计数归零时,该节点被删除。对于普通的 Tree Root, 引用计数在创建时被加一,因为 Superblock 会引用这个 Root block 。很明显,初始情况下这棵树中的所有其他节点的引用计数都为一。当 COW 事务 commit 时,superblock 被修改指向新的 Root A ’’,原来 Root block A 的引用计数被减一,变为零,因此 A 节点被删除。 A 节点的删除会引发其子孙节点的引用计数也减一,图 1-10 中的 B,C 节点的引用计数因此也变成了 0,从而被删除。 D,E 节点在 COW 时,因为被 A ’’所引用,计数器加一,因此计数器这时并未归零,从而没有被删除。
创建 Sna hot 时,btrfs 将的 Root A 节点复制到 sA,并将 sA 的引用计数设置为 2 。在事务 commit 的时候,sA 节点的引用计数不会归零,从而不会被删除,因此用户可以继续通过 Root sA 访问 a hot 中的文件。
软件 RAID
RAID 技术有很多非常吸引人的特性,比如用户可以将多个廉价的 IDE 磁盘组合为 RAID0 阵列,从而变成了一个大容量的磁盘; RAID1 和更高级的 RAID 配置还提供了数据冗余保护,从而使得存储在磁盘中的数据更加安全。
Btrfs 很好的支持了软件 RAID,RAID 种类包括 RAID0,RAID1 和 RAID10.
Btrfs 缺省情况下对 metadata 进行 RAID1 保护。前面已经提及 btrfs 将设备空间划分为 chunk,一些 chunk 被配置为 metadata,即只存储 metadata 。对于这类 chunk,btrfs 将 chunk 分成两个条带,写 metadata 的时候,会同时写入两个条带内,从而实现对 metadata 的保护。
Btrfs 主页上罗列的其他特性不容易分类,这些特性都是现代文件系统中比较先进的技术,能够提高文件系统的时间或空间效率。
Delay allocation
延迟分配技术能够减少磁盘碎片。在 Linux 内核中,为了提高效率,很多操作都会延迟。
在文件系统中,小块空间频繁的分配和释放会造成碎片。延迟分配是这样一种技术,当用户需要磁盘空间时,先将数据保存在内存中。并将磁盘分配需求发送给磁盘空间分配器,磁盘空间分配器并不立即分配真正的磁盘空间。只是记录下这个请求便返回。
磁盘空间分配请求可能很频繁,所以在延迟分配的一段时间内,磁盘分配器可以收到很多的分配请求,一些请求也许可以合并,一些请求在这段延迟期间甚至可能被取消。通过这样的“等待”,往往能够减少不必要的分配,也有可能将多个小的分配请求合并为一个大的请求,从而提高 IO 效率。
Inline file
系统中往往存在大量的小文件,比如几百个字节或者更小。如果为其分配单独的数据 block,便会引起内部碎片,浪费磁盘空间。 btrfs 将小文件的内容保存在元数据中,不再额外分配存放文件数据的磁盘块。改善了内部碎片问题,也增加了文件的访问效率。
上图显示了一个 BTree 的叶子节点。叶子中有两个 extent data item 元数据,分别用来表示文件 file1 和 file2 所使用的磁盘空间。
假设 file1 的大小仅为 15 个字节; file2 的大小为 1M 。如图所示,file2 采用普通的 extent 表示方法:extent2 元数据指向一段 extent,大小为 1M,其内容便是 file2 文件的内容。
而对于 file1, btrfs 会把其文件内容内嵌到元数据 extent1 中。如果不采用 inline file 技术。如虚线所示,extent1 指向一个最小的 extent,即一个 block,但 file1 有 15 个字节,其余的空间便成为了碎片空间。
采用 inline 技术,读取 file1 时只需要读取元数据 block,而无需先读取 extent1 这个元数据,再读取真正存放文件内容的 block,从而减少了磁盘 IO 。
得益于 inline file 技术,btrfs 处理小文件的效率非常高,也避免了磁盘碎片问题。
目录索引 Directory index
当一个目录下的文件数目巨大时,目录索引可以显著提高文件搜索时间。 Btrfs 本身采用 BTree 存储目录项,所以在给定目录下搜索文件的效率是非常高的。
然而,btrfs 使用 BTree 管理目录项的方式无法同时满足 readdir 的需求。 readdir 是 POSIX 标准 API,它要求返回指定目录下的所有文件,并且特别的,这些文件要按照 inode number 排序。而 btrfs 目录项插入 BTree 时的 Key 并不是 Inode number,而是根据文件名计算的一个 hash 值。这种方式在查找一个特定文件时非常高效,但却不适于 readdir 。为此,btrfs 在每次创建新的文件时,除了插入以 hash 值为 Key 的目录项外,还同时插入另外一种目录项索引,该目录项索引的 KEY 以 sequence number 作为 BTree 的键值。这个 sequence number 在每次创建新文件时线性增加。因为 Inode number 也是每次创建新文件时增加的,所以 sequence number 和 inode number 的顺序相同。以这种 sequence number 作为 KEY 在 BTree 中查找便可以方便的得到一个以 inode number 排序的文件列表。
另外以 sequence number 排序的文件往往在磁盘上的位置也是相邻的,所以以 sequence number 为序访问大量文件会获得更好的 IO 效率。
大家都曾使用过 zip,winrar 等压缩软件,将一个大文件进行压缩可以有效节约磁盘空间。 Btrfs 内置了压缩功能。
通常人们认为将数据写入磁盘之前进行压缩会占用很多的 CPU 计算时间,必然降低文件系统的读写效率。但随着硬件技术的发展,CPU 处理时间和磁盘 IO 时间的差距不断加大。在某些情况下,花费一定的 CPU 时间和一些内存,但却能大大节约磁盘 IO 的数量,这反而能够增加整体的效率。
比如一个文件不经过压缩的情况下需要 100 次磁盘 IO 。但花费少量 CPU 时间进行压缩后,只需要 10 次磁盘 IO 就可以将压缩后的文件写入磁盘。在这种情况下,IO 效率反而提高了。当然,这取决于压缩率。目前 btrfs 采用 zlib 提供的 DEFALTE/INFLATE 算法进行压缩和解压。在将来,btrfs 应该可以支持更多的压缩算法,满足不同用户的不同需求。
目前 btrfs 的压缩特性还存在一些不足,当压缩使能后,整个文件系统下的所有文件都将被压缩,但用户可能需要更细粒度的控制,比如针对不同的目录采用不同的压缩算法,或者禁止压缩。我相信,btrfs 开发团队将在今后的版本中解决这个问题。
对于某些类型的文件,比如 jpeg 文件,已经无法再进行压缩。尝试对其压缩将纯粹浪费 CPU 。为此,当对某文件的若干个 block 压缩后发现压缩率不佳,btrfs 将不会再对文件的其余部分进行压缩操作。这个特性在某种程度上提高了文件系统的 IO 效率。
预分配
很多应用程序有预先分配磁盘空间的需要。他们可以通过 posix_fallocate 接口告诉文件系统在磁盘上预留一部分空间,但暂时并不写入数据。如果底层文件系统不支持 fallocate,那么应用程序只有使用 write 预先写一些无用信息以便为自己预留足够的磁盘空间。
由文件系统来支持预留空间更加有效,而且能够减少磁盘碎片,因为所有的空间都是一次分配,因而更有可能使用连续的空间。 Btrfs 支持 posix_fallocate 。
至此,我们对 btrfs 的很多特性进行了较为详细的探讨,但 btrfs 能提供的特性却并不止这些。 btrfs 正处于试验开发阶段,还将有更多的特性。
Btrfs 也有一个重要的缺点,当 BTree 中某个节点出现错误时,文件系统将失去该节点之下的所有的文件信息。而 ext2/3 却避免了这种被称为”错误扩散”的问题。
但无论怎样,希望您和我一样,开始认同 btrfs 将是 Linux 未来最有希望的文件系统。
了解了 btrfs 的特性,想必您一定想亲身体验一下 btrfs 的使用。本章将简要介绍如何使用 btrfs 。
mkfs.btrfs 命令建立一个 btrfs 格式的文件系统。可以用如下命令在设备 sda5 上建立一个 btrfs 文件系统,并将其挂载到 /btrfsdisk 目录下:
#mkfs.btrfs /dev/sda5
#mkdir /btrfsdisk
#mount – t btrfs /dev/sda5 /btrfsdisk
这样一个 Btrfs 就在设备 sda5 上建立好了。值得一提的是在这种缺省情况下,即使只有一个设备,Btrfs 也会对 metadata 进行冗余保护。如果有多个设备,那么您可以在创建文件系统的时候进行 RAID 设置。详细信息请参见后续的介绍。
这里介绍其他几个 mkfs.btrfs 的参数。
Nodesize 和 leafsize 用来设定 btrfs 内部 BTree 节点的大小,缺省为一个 page 大小。但用户也可以使用更大的节点,以便增加 fanout,减小树的高度,当然这只适合非常大的文件系统。
Alloc-start 参数用来指定文件系统在磁盘设备上的起始地址。这使得用户可以方便的预留磁盘前面的一些特殊空间。
Byte-count 参数设定文件系统的大小,用户可以只使用设备的一部分空间,当空间不足时再增加文件系统大小。
当文件系统建立好之后,您可以修改文件系统的大小。 /dev/sda5 挂载到了 /btrfsdisk 下,大小为 800M 。假如您希望只使用其中的 500M,则需要减小当前文件系统的大小,这可以通过如下命令实现:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 101086 19000 76867 20% /boot
/dev/sda5 811248 32 811216 1% /btrfsdisk
#btrfsctl – r -300M /btrfsdisk
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 101086 19000 76867 20% /boot
/dev/sda5 504148 32 504106 1% /btrfsdisk
同样的,您可以使用 btrfsctl 命令增加文件系统的大小。
下面的例子中,创建快照 ap1 时系统存在 2 个文件。创建快照之后,对 test1 的内容进行修改。再回到 ap1,打开 test1 文件,可以看到 test1 的内容依旧是之前的内容。
#ls /btrfsdisk
test1 test2
#vi test1
This is a test
#btrfsctl – s ap1 /btrfsdisk
#vi test1
Test1 is modified
#cd /btrfsdisk/ ap1
#cat test1
This is a test
可以从上面的例子看到,快照 ap1 保存的内容不会被后续的写操作所改变。
使用 btrfs 命令,用户可以方便的建立 subvolume 。假设 /btrfsdisk 已经挂载到了 btrfs 文件系统,则用户可以在这个文件系统内创建新的 subvolume 。比如建立一个 /sub1 的 subvolume,并将 sub1 挂载到 /mnt/test 下:
#mkdir /mnt/test
#btrfsctl – S sub1 /btrfsdisk
#mount – t btrfs – o subvol=sub1 /dev/sda5 /mnt/test
Subvolme 可以方便管理员在文件系统上创建不同用途的子文件系统,并对其进行一些特殊的配置,比如有些目录下的文件关注节约磁盘空间,因此需要打开压缩,或者配置不同的 RAID 策略等。目前 btrfs 尚处于开发阶段,创建的 subvolme 和 a hot 还无法删除。此外针对 subvolume 的磁盘 quota 功能也未能实现。但随着 btrfs 的不断成熟,这些功能必然将会进一步完善
mkfs 的时候,可以指定多个设备,并配置 RAID 。下面的命令演示了如何使用 mkfs.btrfs 配置 RAID1 。 Sda6 和 sda7 可以配置为 RAID1,即 mirror 。用户可以选择将数据配置为 RAID1,也可以选择将元数据配置为 RAID1 。
将数据配置为 RAID1,可以使用 mkfs.btrfs 的 -d 参数。如下所示:
#mkfs.btrfs – d raid1 /dev/sda6 /dev/sda7
#mount – t btrfs /dev/sda6 /btrfsdisk
当设备的空间快被使用完的时候,用户可以使用 btrfs-vol 命令为文件系统添加新的磁盘设备,从而增加存储空间。下面的命令向 /btrfsdisk 文件系统增加一个设备 /sda8
#btrfs-vol – a /dev/sda8 /btrfsdisk
用户可以使用 mount 参数打开 btrfs 针对 SSD 的优化。命令如下:
#mount – t btrfs – o SSD /dev/sda5 /btrfsdisk
开启压缩功能
用户可以使用 mount 参数打开压缩功能。命令如下
#mount – t btrfs – o compre /dev/sda5 /btrfsdisk
同步文件系统
为了提高效率,btrfs 的 IO 操作由一些内核线程异步处理。这使得用户对文件的操作并不会立即反应到磁盘上。您可以做一个实验,在 btrfs 上创建一个文件后,稍等 5 到 10 秒将系统电源切断,再次重启后,新建的文件并没有出现。
对于多数应用这并不是问题,但有些时候用户希望 IO 操作立即执行,此时就需要对文件系统进行同步。下面的 btrfs 命令用来同步文件系统:
#btrfsctl – c /btrfsdisk
Btrfs 提供了一定的 debug 功能,对于想了解 Btrfs 内部实现原理的读者,debug 将是您最喜欢的工具。这里简单介绍一下 debug 功能的命令使用。
下面的命令将设备 sda5 上的 btrfs 文件系统中的元数据打印到屏幕上。
#btrfs-debug-tree /dev/sda5
通过对打印信息的分析,您将能了解 btrfs 内部各个 BTree 的变化情况,从而进一步理解每一个文件系统功能的内部实现细节。
比如您可以在创建一个文件之前将 BTree 的内容打印出来,创建文件后再次打印。通过比较两次的不同来了解 btrfs 创建一个文件需要修改哪些元数据。进而理解 btrfs 内部的工作原理。
我想,在未来的日子里,EXT 等传统文件系统肯定不会消失。古典文件系统成熟,稳定,经受了历史的考验,必然将在很长一段时间内被继续广泛使用。古典文件系统和新一代文件系统同时并存是非常合理的事情。正如我们在被陈亦迅的歌声触动和感伤之后,还可以在莫扎特的奏鸣曲中得到慰藉和平静。
本人水平有限,对文件系统的了解也并不深入,因此文中必然有很多错误的地方,希望能得到大家的指正。
是一篇非常不错的关于 Linux 文件系统的文章。
也是不错的参考资料。
第一个受 Linux 支持的文件系统是 Minix 文件系统。这个文件系统有严重的性能问题,因此出现了另一个针对 Linux 的文件系统,即扩展文件系统。第 1 个扩展文件系统(ext1)由 Remy Card 设计,并于 1992 年 4 月引入到 Linux 中。ext1 文件系统是第一个使用虚拟文件系统(VFS)交换的文件系统。虚拟文件系统交换是在 0.96c 内核中实现的,支持的最大文件系统为 2 GB。
第 2 个扩展文件系统(ext2)也是由 Remy Card 实现的,并于 1993 年 1 月引入到 Linux 中。它借鉴了当时文件系统(比如 Berkeley Fast File System [FFS])的先进想法。ext2 支持的最大文件系统为 2TB,但是 2.6 内核将该文件系统支持的最大容量提升到 32TB。
第 3 个扩展文件系统(ext3)是 Linux 文件系统的重大改进,尽管它在性能方面逊色于某些竞争对手。ext3 文件系统引入了日志 概念,以在系统突然停止时提高文件系统的可靠性。虽然某些文件系统的性能更好(比如 Silicon Graphics 的 XFS 和 IBM? Journaled File System [JFS]),但 ext3 支持从使用 ext2 的系统进行就地(in-place)升级。ext3 由 Stephen Tweedie 实现,并于 2001 年 11 月引入。
今天,我们已经拥有第 4 个扩展文件系统(ext4)。ext4 在性能、伸缩性和可靠性方面进行了大量改进。最值得一提的是,ext4 支持 1 EB 的文件系统。ext4 是由 Theodore Tso(ext3 的维护者)领导的开发团队实现的,并引入到 2.6.19 内核中。目前,它在 2.6.28 内核中已经很稳定(到 2008 年 12 月为止)。
ext4 从竞争对手那里借鉴了许多有用的概念。例如,在 JFS 中已经实现了使用区段(extent)来管理块。另一个与块管理相关的特性(延迟分配)已经在 XFS 和 Sun Microsystems 的 ZFS 中实现。
在 ext4 文件系统中,您可以发现各种改进和创新。这些改进包括新特性(新功能)、伸缩性(打破当前文件系统的限制)和可靠性(应对故障),当然也包括性能的改善。
Linux 支持几个不同的文件系统。这些文件系统中,一些是专用的网络文件系统或为其他操作系统开发的文件系统,但绝大部分还是用作 Linux 本地文件系统 — 您可以将 Linux 根(
)和系统目录放在这种文件系统里。目前,这一类文件系统包括 ext2、ext3、ReiserFS、XFS 和 Journaled File System (JFS)。但是文件系统一直在不断设计和开发中,新的文件系统也将陆续问世。
目前正在开发的最重要的 Linux 文件系统是 ext4 — 它是专门为 Linux 开发的原始的扩展文件系统(ext 或 extfs)的第四版。由于继承了以前版本,ext4 在不久的将来很可能会成为一个重要的 Linux 标准文件系统(可能是 标准文件系统)。
扩展文件系统(ext 或 extfs)第四版产生的原因是开发人员在 ext3 中并入了新的高级功能。但在实现的过程出现了几个问题:
一些新功能违背向后兼容性。
Ext3 代码变得更加复杂并难以维护。
这些更改使原本十分可靠的 ext3 变得不可靠。
由于这些原因,从 2006 年 6 月份开始,开发人员决定把 ext4 从 ext3 中分离出来进行独立开发。Ext4 的开发工作从那时起开始进行,但大部分 Linux 用户和管理员都不怎么注意这件事情。随着 2.6.19 内核在 2006 年 11 月的发布,ext4 第一次出现在主流内核里,但是它当时还处于试验阶段(现在还是),因此很多人都忽视了它。
由于还处于开发阶段,从 2.6.24.4 内核开始,ext4 的功能列表就一直在变动。 Ext4 的当前和预期功能包括从 ext3 发展而来的功能,见表 1。
更大的文件系统
Ext3 最多只能容纳 32 TiB 的文件系统和 2 TiB 的文件,根据使用的具体架构和系统设置,实际容量上限可能比这个数字还要低 — 或许只能容纳 2 TiB 的文件系统和 16 gibibyte(GiB)的文件。相反,Ext4 的文件系统容量达到 1024 pebibyte(PiB), 或 1 exbibyte(EiB),而文件容量则达到 16 TiB。对一般的台式计算机和服务器而言,这可能并不重要,但对大磁盘阵列的用户而言,这就非常重要了。
extent 是一种提高磁盘文件描述符效率的方法,它能够减少删除大型文件所需的时间等等。
持久性预分配
如果一个应用程序需要在实际使用磁盘空间之前对它进行分配,大部分文件系统都是通过向未使用的磁盘空间写入 0 来实现分配。而 ext4 允许提前分配,无需进行上述操作,这能提高某些数据库和多媒体工具的性能。
延迟分配
Ext4 能够尽量延迟磁盘空间的分配,这能够提高性能。
更多的子目录
如果 ext3 中一个目录只能包含 32,000 个子目录还不能满足您的需求,那么不必担心,因为 ext4 取消了这一限制。
日志 checksum
Ext4 给日志数据添加了检查和(checksum)功能,这能提高可靠性和性能。
在线磁盘整理
虽然 ext3 一般不会受到碎片的影响,但是存储在它里面的文件多少会产生一些碎片。Ext4 支持在线磁盘整理,这能够改善总体性能。
恢复删除文件
虽然这一功能尚未实现,但 ext4 将支持恢复删除文件。当文件被意外删除时,此功能将极为有用。
更快的文件系统检查
Ext4 添加了新的数据结构,允许
在检查中跳过磁盘中未使用的部分,因此加快了文件系统的检查。
纳秒级时间戳
大部分的文件系统(包括 ext3)都包含有精确到秒的时间戳数据,而 ext4 把精确度提高到了纳秒。一些资料还表明 ext4 的时间戳支持的日期达到 2514 年 4 月 25 日,而 ext3 只达到 2038 年 1 月 18 日。
由于 ext4 目前还处于开发阶段,这个功能表还会有所变动。功能列表的一些功能在实际使用中不具备与 ext3 的向后兼容性 — 即可能无法使用 ext3 文件系统类型的代码挂载 ext4 文件系统。但是 ext4 保留了向前兼容性 — 您可以像挂载 ext4 文件系统一样挂载 ext3 文件系统。
ext3 自从诞生之日起,就由于其可靠性好、特性丰富、性能高、版本间兼容性好等优势而迅速成为 Linux 上非常流行的文件系统,诸如 Redhat 等发行版都将 ext3 作为默认的文件系统格式。为了尽量保持与 ext2 文件系统实现更好的兼容性,ext3 在设计时采用了很多保守的做法,这些保守的设计为 ext3 赢得了稳定、健壮的声誉,迅速得到了 Linux 用户(尤其是原有的 ext2 文件系统的用户)的青睐,但同时这也限制了它的可扩展能力,无法支持特别大的文件系统。
随着硬盘存储容量越来越大(硬盘容量每年几乎都会翻一倍,现在市面上已经有 1TB 的硬盘出售,很快桌面用户也可以享用这么大容量的存储空间了),企业应用所需要和产生的数据越来越多(Lawrence Livermore National La 使用的 BlueGene/L 系统上所使用的数据早已超过了 1PB),以及在线重新调整大小特性的支持,ext3 所面临的可扩充性问题和性能方面的压力也越来越大。在 ext3 文件系统中,如果使用 4KB 大小的数据块,所支持的最大文件系统上限为16TB,这是由于它使用了 32 位的块号所决定的(232 * 212 B = 244 B = 16 TB)。为了解决这些限制,从 2006 年 8 月开始,陆续有很多为 ext3 设计的补丁发布出来,这些补丁主要是扩充了两个特性:针对大文件系统支持的设计和 extent 映射技术。不过要想支持更大的文件系统,就必须对磁盘上的存储格式进行修改,这会破坏向前兼容性。因此为了为庞大的 ext3 用户群维护更好的稳定性,设计人员决定从 ext3 中另辟一支,设计下一代 Linux 上的文件系统,即 ext4。
ext4 的主要目标是解决 ext3 所面临的可扩展性、性能和可靠性问题。从 2.6.19 版本的内核开始,ext4 已经正式进入内核源代码中,不过它被标记为正在开发过程中,即 ext4dev。本文将介绍 ext4 为了支持更好的可扩展性方面所采用的设计,并探讨由此而引起的磁盘数据格式的变化,以及对恢复删除文件所带来的影响。
为了支持更大的文件系统,ext4 决定采用 48 位的块号取代 ext3 原来的 32 位块号,并采用 extent 映射来取代 ext3 所采用的间接数据块映射的方法。这样既可以增大文件系统的容量,又可以改进大文件的访问效率。在使用 4KB 大小的数据块时,ext4 可以支持最大 248 * 212 = 260 B(1 EB)的文件系统。之所以采用 48 位的块号而不是直接将其扩展到 64 位是因为,ext4 的开发者认为 1 EB 大小的文件系统对未来很多年都足够了(实际上,按照目前的速度,要对 1 EB 大小的文件系统执行一次完整的 fsck 检查,大约需要 119 年的时间),与其耗费心机去完全支持 64 位的文件系统,还不如先花些精力来解决更加棘手的可靠性问题。
将块号从 32 位修改为 48 位之后,存储元数据的结构都必须相应地发生变化,主要包括超级块、组描述符和日志。下面给出了 ext4 中所使用的新结构的部分代码。
另外,由于日志中要记录所修改数据块的块号,因此 JBD也需要相应地支持 48 位的块号。同样是为了为 ext3 广大的用户群维护更好的稳定性,JBD2 也从 JBD 中分离出来,详细实现请参看内核源代码。
采用 48 位块号取代原有的 32 位块号之后,文件系统的最大值还受文件系统中最多块数的制约,这是由于 ext3 原来采用的结构决定的。回想一下,对于 ext3 类型的分区来说,在每个分区的开头,都有一个引导块,用来保存引导信息;文件系统的数据一般从第 2 个数据块开始(更确切地说,文件系统数据都是从 1KB 之后开始的,对于 1024 字节大小的数据块来说,就是从第 2 个数据块开始;对于超过 1KB 大小的数据块,引导块与后面的超级块等信息共同保存在第 1 个数据块中,超级块从 1KB 之后的位置开始)。为了管理方便,文件系统将剩余磁盘划分为一个个块组。块组前面存储了超级块、块组描述符、数据块位图、索引节点位图、索引节点表,然后才是数据块。通过有效的管理,ext2/ext3 可以尽量将文件的数据放入同一个块组中,从而实现文件数据在磁盘上的最大连续性。
在 ext3 中,为了安全性方面的考虑,所有的块描述符信息全部被保存到第一个块组中,因此以缺省的 128MB (227 B)大小的块组为例,最多能够支持 227 / 32 = 222 个块组,最大支持的文件系统大小为 222 * 227 = 249 B= 512 TB。而ext4_group_desc 目前的大小为 44 字节,以后会扩充到 64 字节,所能够支持的文件系统最大只有 256 TB。
为了解决这个问题,ext4 中采用了元块组(metablock group)的概念。所谓元块组就是指块组描述符可以存储在一个数据块中的一些连续块组。仍然以 128MB 的块组(数据块为 4KB)为例,ext4 中每个元块组可以包括 4096 / 64 = 64 个块组,即每个元块组的大小是 64 * 128 MB = 8 GB。
采用元块组的概念之后,每个元块组中的块组描述符都变成定长的,这对于文件系统的扩展非常有利。原来在 ext3 中,要想扩大文件系统的大小,只能在第一个块组中增加更多块描述符,通常这都需要重新格式化文件系统,无法实现在线扩容;另外一种可能的解决方案是为块组描述符预留一部分空间,在增加数据块时,使用这部分空间来存储对应的块组描述符;但是这样也会受到前面介绍的最大容量的限制。而采用元块组概念之后,如果需要扩充文件系统的大小,可以在现有数据块之后新添加磁盘数据块,并将这些数据块也按照元块组的方式进行管理即可,这样就可以突破文件系统大小原有的限制了。当然,为了使用这些新增加的空间,在 superblock 结构中需要增加一些字段来记录相关信息。(ext4_super_block 结构中增加了一个 s_first_meta_bg 字段用来引用第一个元块组的位置,这样还可以解决原有块组和新的元块组共存的问题。)下图给出了 ext3 为块组描述符预留空间和在 ext4 中采用元块组后的磁盘布局。
( Tue, 2 Aug 2011 19:35:11 +0800 )
Description:
基本上所有Linux 发行版在启动系统时都是根据/etc/fstab文件的配置来挂载分区的。在/etc/fstab中,根据不同格式的分区,其挂载参数也不同,参数不同其结果不同,包括用户的读写权限,下面一一说来。
1、对于fat32格式分区,向/etc/fstab中加入下面的内容:
/dev/sdaX /media/Y vfat user,rw,utf8,umask=000 0 0
说明:/dev/sdaX可以以管理员身份通过命令fdisk -l得知,只要找你需要挂载的那个分区即可。/media/Y这是一个文件夹,应该提前建立好。”user,rw”是说用户可进行读写操作。utf8这个可以说是必要的,因为往往有一些windows的文件夹是中文名的,而在windows下是GBK的编码方式,在linux下挂载就会看到乱码,加上 utf8的参数将中文自动转换成UTF8显示,可以有效的避免乱码问题。umask=000说明对所有用户赋予了读写操作,也就是说挂载之后普通用户也可进行操作。最后有两个0通过空格隔开,这两个0中的后者决定了开机是否检查,如果需要检查则将其改为1。
2、对于EXT3、EXT4等Linux分区格式,可以向/etc/fstab中加入下面的内容:
/dev/sdaX /media/Y ext3 defaults 0 1
/dev/sdaX /media/Y ext4 defaults 0 1
/dev/sdaX /media/Y jfs defaults 0 1
上面这几行分别对应了ext3、ext4和jfs的挂载语句,具体请根据您自己的分区情况来修改。这几句中,X与Y的含义同上,default参数说明按照默认格式挂载,后面的0和1就说明开机要检查。
3、NTFS格式分区,比较麻烦,首先请***ntfs-3g这个软件,如果不***这个软件将不能对NTFS格式分区进行读写。***之后将如下内容添加到/etc/fstab中:
/dev/sdaX /media/Y ntfs-3g defaults 0 0
此处X与Y的含义同上,值得说明的是ntfs-3g后的参数,如下:
users – 假如ntfs-3g可执行文件设置了SUID root(命令:chmod u+s /bin/ntfs-3g ) ,则允许任何人挂载/卸载NTFS分区。请注意,你要用users 而不是user
uid – 指定NTFS分区中文件和目录的拥有者(用十进制数表示)
gid – 指定NTFS分区中文件和目录的用户组(用十进制数表示)
fmask – 文件权限(八进制数掩码)
dmask – 目录权限(八进制数掩码)
locale – 曾经用来让使用国际化字符集的文件可见。在ntfs-3g 2009.1.1和更新的版本中已不再需要。
noauto – 启动时不要自动挂载分区
( Tue, 2 Aug 2011 17:28:36 +0800 )
Description: 文章声明
作者: 编写时间:
2011年01月15日
网址:
作者保留所有权利,转载请保留文章全部内容!
Ubuntu系统的硬盘空间不够用了,需要增加新的硬盘扩容。将硬盘分区、格式化、自动挂载配置的整个过程记下来,备忘。
运行环境 | Enviroment
Ubuntu 10.10
一、硬盘分区 | Hard disk add new partition
1、显示硬盘及所属分区情况。在终端窗口中输入如下命令:
sudo fdisk -lu
显示当前的硬盘及所属分区的情况。如下图所示:
系统提示:DIsk /dev/sdb doe 't contain a valid partition table。 2
、对硬盘进行分区。
在终端窗口中输入如下命令:
sudo fdisk /dev/sdb
如下图所示:
在Command (m for help)提示符后面输入m显示一个帮助菜单。 在Command (m for help)提示符后面输入n,执行 add a new partition 指令给硬盘增加一个新分区。 出现Command action时,输入e,指定分区为扩展分区(extended)。 出现Partition number(1-4)时,输入1表示只分一个区。 后续指定起启柱面(cylinder)号完成分区。 在Command (m for help)提示符后面输入p,显示分区表。
系统提示如下:
Device Boot Start End Block Id System
/dev/sdb1 1 26108 209712478+ 5 Extended 在Command (m for help)提示符后面输入w,保存分区表。
系统提示:The partition table has been altered! 在终端窗口中输
如下命令:
sudo fdisk -lu
如下图所示:
系统已经识别了硬盘 /dev/sdb 的分区。 二、硬盘格式化 | Format hard disk
1、显示硬盘及所属分区情况。在终端窗口中输入如下命令
sudo mkfs -t ext4 /dev/sdb
说明:
-t ext4 表示将分区格式化成ext4文件系统类型。 注意:在格式 化完成后系统有如下提示:
This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override. 表示系统为了保证文件系统的完整,每加载28次或每隔180天就要完整地检查文件系统,可以使用命令 tune2fs -c 或 tune2fs -i 来调整默认值 。
三、挂载硬盘分区 | Mount hard disk partition
1、显示硬盘挂载情况。在终端窗口中输入如下命令
sudo df -l
新硬盘分区没有挂载,无法进入和查看。
在终端窗口中输入如下命令
sudo mount -t ext4 /dev/sdb /devdata
说明:
指定硬盘分区文件系统类型为ext4 ,同时将 /dev/sdb 分区挂载到目录 /devdata。
再次在终端窗口中输入如下命令
sudo df -l
新硬盘分区已经挂载,如下图最下面的红色方框内容。 2、配置硬盘在系统启动自动挂载。在文件 /etc/fstab 中加入如下配置
# /devdata was on /dev/sdb
UUID=37eaa526-5d96-4237-8468-603df5216ce9 /devdata ext4 default 0 3 附录1:fdisk命令详解 | A endix part 1: fdisk command syntax
fdisk 命令的语法如下:
fdisk [-b sectorsize] device fdisk -l [-u] [device...]
fdisk -s partition...
fdisk -v
说明:
-b < ectorsize 指定每个分区的大小。也可以执行fdisk device(如:fdisk /dev/sdb)后,在系统提示时指定。
-l 列出指定的外围设备的分区表状况。如果仅执行 fdisk -l ,系统会列出已知的分区。
-u 搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址。
-s < arttio gt 将指定的分区的大小输出到标准输出上,单位为区块。
-v 显示fdisk的版本信息。
附录2:mkfs命令详解 | A endix part 2: mkfs command syntax
mkfs 命令的语法如下:
mkfs [-V] [-t fstype] [fs-optio ] filesys
说明:
-V 显示简要的使用方法。
-t fstype> 指定要建立何种文件系统,如:ext3, ext4。
f 指定建立文件系统时的参数。
-v 显示版本信息与详细的使用方法。
附录3:mount命令详解 | A endix part 3: mount command syntax
mkfs 命令的语法如下:
mount [-afFnrsvw] [-t vfstype]
[-L label] [-o optio ] device dir
mount [-lhv]
说明:
-a 加载文件/etc/fstab中设置的所有设备。
-f 不实际加载设备。可与-v等参数同时使用以查看mount的执行过程。
-F 需与-a参数同时使用。所有在/etc/fstab中设置的设备会被同时加载,可加快执行速度。
-t vfstype 指定加载的文件系统类型,如:ext3, ext4。
-L label 给挂载点指定一个标签名称。
-l 显示分区的label。
-h 显示帮助信息。
-v 显示mount的版本信息。
device 要挂载的分区或文件。如果device是一个文件,挂载时须加上 -o loop参数。
dir 分区的挂载点。
附录4:fstab配置详解 | A endix part 4: fstab detail configuration
/etc/fstab 中一共有6列:
file system:指定要挂载的文件系统的设备名称(如:/dev/sdb)。也可以采用UUID,UUID可以通过使用blkid命令来查看(如:blkid /dev/sdb)指定设备的UUID号。
mount point:挂载点。就是自己手动创建一个目录,然后把分区挂载到这个目录下。
type:用来指定文件系统的类型。如:ext3, ext4, ntfs等。
option dump:0表示不备份;1表示要将整个file system中的内容备份。此处建议设置为0。
pa :用来指定fsck如何来检查硬盘。0表示不检查;挂载点为分区/(根分区)必须设置为1,其他的挂载点不能设置为1;如果有挂载a 设置成大于1的值,则在检查完根分区后,然后按pa 的值从小到大依次检查,相同数值的同时检查。如:/home 和 /boot 的pa 设置成2,/devdata 的pa 设置成3,则系统在检查完根分区,接着同时检查/boot和/home,再检查/devdata。
正文结束
( Tue, 2 Aug 2011 17:26:25 +0800 )
Description:
【IT168 专稿】最近由于工作需要,对ext3, ext4, reiserfs, reiser4, xfs, jfs, btrfs,
nilfs2, logfs多种文件系统在SSD固态
上的性能进行了全面的测试评估与分析,为实际应用选择SSD文件系统提供参考,并给出性能优化建议。测试中使用的Benchmark包括postmark, randomio, bo ie++, iozone, filebench,以及dd, 编译内核, 创建/删除海量文件目录等等。
  1、SSD文件系统选择
  EXT4、Reiserfs在性能方面表现较优,其中EXT4数据吞吐量突出,Reiserfs在IOPS(元数据操作)方面较优。
  Btrfs、Nilfs2在性能方面表现稍差,但两者均是日志结构(log-structure),Btrfs更是具有COW/WAFL特性,并对针对SSD进行了优化。因此,有利于SSD的损耗均衡,延长使用寿命。
  对于频繁小文件应用,建议选择Reiserfs, ext4, btrf 对于大文件应用,建议选择ext4,btrf 如果SSD寿命优化性能,则建议选择Btrfs, nilfs2。至于生产系统选择哪个文件系统,请结合线上实际测试参考。
  2、关于logfs文件系统
  logfs也是一种日志结构文件系统,而且可以直接工作与SSD,这与JFFS/YAFFS不同。但是,测试结果表明,logfs目前非常不成熟,仍不稳定,未达到实际应用标准,诸如内核编译、大量文件目录创建/删除、postmark等benchmark均未能通过测试。由于SSD故障,randomio, bo ie++, iozone, filebench未完成。因此,不建议当前阶段实际应用。
  3、SSD性能特点
  SSD数据寻址时间很小,甚至可以忽略不计,顺序与随机IO性能相差不大。SAS、SATA磁盘随机IO性能要小于顺序IO很多。
  SSD读性能要优于写性能,这是由于写前擦除、擦除块边界对齐、损耗均衡等原因所致。
  SSD目录创建/删除操作性能与SAS/SATA相差不大,这与VFS和具体文件系统元数据组织与操作规则相关。
  4、SSD文件系统优化
  1、Cache
  如果SSD带有DRAM缓存,请打开cache。
  2、readahead
  打开块驱动程序预读功能,预读扇区数建议256。(参考EXT3文件系统优化)
  3、I/O scheduler
  SSD数据寻址时间非常小,甚至可以忽略不计,不需要对IO请求进行插入和排序。因此,noop是最理想的调度算法。
  4、journal
  如果文件系统支持关闭journal,则关闭;否则,如果支持data=writeback,则在mount时指定。
  5、文件系统参数
  请参考Ext3文件系统优化,通常保持defaults,特殊情况请参考mkfs参数。
  6、mount参数
  ext3 defaults,async,noatime,nodiratime
  ext4 defaults,async,noatime,nodiratime,data=writeback,barrier=0
  xfs defaults,async,noatime,nodiratime,barrier=0
  reiser4 defaults,async,noatime,nodiratime
  reiserfs defaults,async,noatime,nodiratime,notail,data=writeback
  jfs defaults,async,noatime,nodiratime
  btrfs defaults,async,noatime,nodiratime, d
  nilfs2 defaults,async,noatime,nodiratime
  logfs defaults,async,noatime,nodiratime,data=writeback,barrier=0
( Thu, 7 Apr 2011 10:39:29 +0800 )
Description: 使用电脑经常不知不觉的发现C盘逐渐变大,可使用此注册表将其移动至D盘,
Windows Registry Editor Version 5.00
***程序的备份文件,以便程序出错和卸载时使用,如office等程序,这一目录删除会造成某些程序无法卸载!
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
"A Data"="D:\\Temp\\A lication Data"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"A Data"=hex(2):44,00,3a,00,5c,00,54,00,65,00,6d,00,70,00,5c,00,41,00,70,00,\ 70,00,6c,00,69,00,63,00,61,00,74,00,69,00,6f,00,6e,00,20,00,44,00,61,00,74,\ 00,61,00,00,00
IE临时文件
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
"Cache"="D:\\Temp\\Temporary Internet Files"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Cache"=hex(2):44,00,3a,00,5c,00,54,00,65,00,6d,00,70,00,5c,00,54,00,65,00,6d,\ 00,70,00,6f,00,72,00,61,00,72,00,79,00,20,00,49,00,6e,00,74,00,65,00,72,00,\ 6e,00,65,00,74,00,20,00,46,00,69,00,6c,00,65,00,73,00,00,00
IE储存的账号密码信息,也就是IE选项里自动完成储存的信息
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
"Cookies"="D:\\Temp\\Cookies"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Cookies"=hex(2):44,00,3a,00,5c,00,54,00,65,00,6d,00,70,00,5c,00,43,00,6f,00,\ 6f,00,6b,00,69,00,65,00,73,00,00,00
桌面文件,这样你在桌面存放的文件不会再占用C盘空间
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
"Desktop"="D:\\Desktop"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Desktop"=hex(2):44,00,3a,00,5c,00,44,00,65,00,73,00,6b,00,74,00,6f,00,70,00,\ 00,00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
"Common Documents"="D:\\Desktop"
"Common Desktop"="D:\\Desktop"
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Common Desktop"=hex(2):25,00,41,00,4c,00,4c,00,55,00,53,00,45,00,52,00,53,00,\ 50,00,52,00,4f,00,46,00,49,00,4c,00,45,00,25,00,5c,00,4c,68,62,97,00,00
"Common Favorites"=hex(2):25,00,41,00,4c,00,4c,00,55,00,53,00,45,00,52,00,53,\ 00,50,00,52,00,4f,00,46,00,49,00,4c,00,45,00,25,00,5c,00,46,00,61,00,76,00,\ 6f,00,72,00,69,00,74,00,65,00,73,00,00,00
IE收藏夹,
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
"Favorites"="D:\\Favorites"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Favorites"=hex(2):44,00,3a,00,5c,00,46,00,61,00,76,00,6f,00,72,00,69,00,74,00,\ 65,00,73,00,00,00
我的文档
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
"Personal"="D:\\My Documents"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Personal"=hex(2):44,00,3a,00,5c,00,4d,00,79,00,20,00,44,00,6f,00,63,00,75,00,\ 6d,00,65,00,6e,00,74,00,73,00,00,00
系统临时文件,更改完后和使用set查看环境变量修改情况
[HKEY_CURRENT_USER\Environment]
"TEMP"="D:\\Temp"
"TMP"="D:\\Temp"
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Se ion Manager\Environment]
"TEMP"="D:\\TEMP"
"TMP"="D:\\TEMP"
程序默认***路径
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion]
"ProgramFilesDir"="D:\\Program Files"
( Thu, 7 Apr 2011 10:24:41 +0800 )
Description:
正线(标准568B):两端线序一样,线序是:白橙,橙,白绿,蓝,白蓝,绿,白棕,棕。
反线(568A):一端为正线的线序,另一端为:白绿,绿,白橙,蓝,白蓝,橙,白棕,棕。
T568A标准连线顺序从左到右依次为:1-绿白、2-绿、3-橙白、4-蓝、5-蓝白、6-橙、7-棕白、8-棕。
T568B标准连线顺序从左到右依次为:1-橙白、2-橙、3-绿白、4-蓝、5-蓝白、6-绿、7-棕白、8-棕。
1 输出数据 (+)
2 输出数据 (-)
3 输入数据 (+)
4 保留为***使用
5 保留为***使用
6 输入数据 (-)
7 保留为***使用
8 保留为***使用
由此可见,虽然双绞线有8根芯线,但在目前广泛使用的百兆网络中,实际上只用到了其中的4根,即第1、第2、第3、第6,它们分别起着收、发信号的作用。于是有了新奇的4芯网线的制作,也可以叫做1-3、2-6交叉接法,这种交叉网线的芯线排列规则是:网线一端的第1脚连另一端的第3脚,网线一端的第2脚连另一端的第6脚,其他脚一一对应即可,也就是在上面介绍的交叉线缆制作方法中把多余的4根线抛开不要。
双绞线可按其是否外加金属网丝套的屏蔽层而区分为屏蔽双绞线(STP)和非屏蔽双绞线(UTP)。
双绞线由8根不同颜色的线分成4对绞合在一起,成对扭绞的作用是尽可能减少电磁辐射与外部电磁干扰的影响。在EIA/TIA-568标准中,将双绞线按电气特性区分为:
三类、四类、五类线。网络中最常用的是三类线和五类线,目前已有六类以上的。
做好的网线要将RJ45水晶头接入网卡或HUB等网络设备的RJ45插座内。相应地RJ45插头座也区分为三类或五类电气特性。RJ45水晶头由金属片和塑料构成,制作网线所需要的RJ一45水晶接头前端有8个凹僧,简称“SE”(Position,位置)。
凹槽内的金属触点共有 8个,简称“8C”( Contact,触点),因此业界对此有“8P8C”的别称。特别需要注意的是RJ45水晶头引脚序号,当金属片面对我们的时候从左至右引脚序号是1~8,序号对于网络连线菲常重要,不能搞错。
EIA/TIA的布线标准中规定了两种双绞线的线序568A与568B。
568A标准:
绿白——1,绿——2,橙白——3,蓝——4,蓝白——5,橙——6,棕白——7,棕——8
568B标准:
橙白——1,橙——2,绿白——3,蓝——4,蓝白——5, 绿——6,棕白——7,棕——8
("橙白"是指浅橙色,或者白线上有橙色的色点或色条的线缆,绿白、棕白、蓝白亦同)。
双绞线的顺序与RJ45头的引脚序号要—一对应。
为了保持最佳的兼容性,普遍采用EIA/TIA 568B标准来制作网线。注意:在整个网络布线中应该只采用一种网线标准。如果标准不统一,几个人共同工作时准会乱套;更严重的是施工过程中一旦出现线缆差错,在成捆的线缆中是很难查找和剔除的。笔者强烈建议统一采用568B标准。
事实上10M以太网的网线只使用 1、2、3、6编号的芯线传递数据,即1、2用于发送,3、6用于接收,按颜色来说:橙白、橙两条用于发送;绿白、绿两条用于接收;4、5,7、8是双向线。
100M和1000M网卡需要使用四对线,即8根芯线全部用于传递数据。由于10M网卡能够使用按 100M方式制作的网线;而且双绞线又提供有四对线,所以日常生活中不再区分,10M网卡一般也按 100M方式制作网线。
另外,根据网线两端连接网络设备的不同,网线又分为直通线(平行线)和交叉线两种。直通线(平行线)就是按前面介绍的568A标准或568B标准制作的网线。而交叉线的线序在直通线的基础上做了一点改变:就是在线缆的一端把1和3对调,2和6对调。即交叉线的一端保持原样(直通线序)不变,在另一端把1和3对调,2和6对调。
交叉线两端的线序如下:
一端(不变) 另一端(对调两根)
橙白 1 3 绿白
橙 2 6 绿
绿白 3 1 橙白
蓝 4 4 蓝
蓝白 5 5 蓝白
绿 6 2 橙
棕白 7 7 棕白
棕 8 8 棕
把网线的1 3 2 6这四芯做网络用(铜片向上,从左至右依次排列),其它的四芯可以剔出来接两部***或再接一路网络。如果只接一部***建议剔4 5两芯。不过这样一来交换机和电脑上网络显示就会从100M变为10M,要相信你接入Internet上网时,带宽通常不会超过10M。
实际上在100M网络运行下,通常八芯就会全用,因为100M网络传输对线路要求较高,不光要用1 3 2 6 ,否则网络运行就会不稳定。国际标准中规定:网线排列顺序有两种:即568A和568B,正常情况下依照568B标准居多,既排线顺序为:1白橙、2橙、3白绿、4蓝、5白蓝、6绿、7白棕、8棕(将其中的1和3、2和6分别颠倒一下为568A标准)。
剥开网线我们可发现四对双绞线缠绕的密度并不一样,用来传输数据的橙、绿两对,缠绕圈数明显大于用来接地和其它公共用途的棕、蓝两对,所以建议大家平时做跳线时,严格按照568B的顺序来排列。也有的人认为:“我就喜欢用自己习惯的排列顺序来做线,也是可以用的吗?”在这里我们要强调,不论做直连线还是交叉线(一端用568A,另一端用568B的方法做出的跳线为交叉线)如果用自己的习惯来排列线序的话,一定要把1 3两芯放在一对双绞线上、2 6两芯放在一对双绞线上。否则的话就失去了双绞线的作用。数据传输衰减严重,传输距离大大降低。
直通双绞线:两端都为568B排线标准的双绞线
交叉双绞线:一端是568A标准,一端是568B标准的双绞线
568A排线顺序:白绿、绿、白橙、蓝、白蓝、橙、白棕、棕
568B排线顺序:白橙、橙、白绿、蓝、白蓝、绿、白棕、棕
对于568A和568B,二者没有本质的区别,只是颜色上的区别,本质的问题是要保证:
(1)1、2线对是一个绕对
(2)3、6线对是一个绕对
(3)4、5线对是一个绕对
(4)7、8线对是一个绕对
(1)用HUB或交换机相互组网时,一根线的两头必须用同一个标准制作,在同一个HUB或交换机上最好只用一种标准制作网线;
(2)当只有两台计算机不用HUB或交换机时,网线的一头需采用568A标准,另一头则应采用568B标准,这是因为网卡的脚1和脚2用作发送数据,而脚3和脚6用作接收数据引脚。两种不同的标准正好和脚1、2、3、6相对应。
(3)不管两台计算机的物理位置多近,实践证明,网线的长度应大于1.5米,否则也会发生数据传输时断时续的现象。
以下情况必须使用交叉线:
1、两台计算机通过网卡直接连接(即 所谓的双机直连)时;
2、以级联方式将集线器或交换机的普通端口连接在一起时;
以下情况必须使用直通线:
1、计算机连接至集线器或交换机时;
2、一台集线器或交换机以Up-Link端口连接至另一台集线器或交换机的普通端口时;
3、集线器或交换机与路由器的LAN端口连接时;
以下情况既可以使用直通线,也可使用交叉线:
1、集线器或交换机的RJ-45端口拥有极性识别功能,可以自动判断所连接的另一端设备,并自动实现MDI/MDI-II间的切换;
2、集线器或交换机的特定端口MDI/MDI-II开关,可通过拨动该开关选择使用直通线或交叉线与其他集线设备连接。
( Fri, 26 Nov 2010 06:04:03 +0800 )
Description:
第二步:***下载回来的MaxDOS,一路默认下一步即可,***完毕后会在C盘根目录生成一个“MaxDOS”的文件夹,复制该文件夹到U盘根目录。在U盘根目录新建一个“els”的文件夹,将下载回来的网众5.8 ISO文件用winrar打开并解压到这个文件夹下。(PS:先解压ISO到硬盘的任意目录,然后再复制所有解压出来的东东到els目录,这样操作比你直接用WINRAR解压到U盘els里速度要快很多哟)。这一步,我们完成了MaxDOS和网众的***文件复制到U盘的操作。
第三步:用系统自带的记事本打开U盘根目录下的menu.lst文件,看清楚里面的格式,对照格式加入以下内容:
title 启动 网众NXP-5.8***程序
kernel /els/isolinux/bzImage
initrd /els/isolinux/initrd.gz load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=6464 rw root=/dev/ram SETUP=u title 运行 MaxDOS 7.1 Plus(集成PQ8.5 DM DISKGen)
kernel /MaxDOS/Memdisk.gz c=555 h=2 s=18 flo y
initrd /MaxDOS/Maxs.sys c=555 h=2 s=18 flo y
这样三步后,一个强大的网众启动U盘就制作完毕了,赶快插到你的爱机上试试吧!!
海蜘蛛这里的方法稍精简。 首先到官网下载最新的海蜘蛛路由ISO文件。点击进入官网 将下载回来的ISO文件复制到U盘的根目录,再在U盘根目录新建一文件夹命名为“hsrouter”,用WinRAR打开下载回来的ISO文件,将里面的boot文件夹解压到U盘中刚才新建的hsrouter目录中。解压出来的内容中包括一个“grub”的文件夹,可以删除,只留下initrd.gz和vmlinuz文件即可,节省宝贵的U盘空间。 修改U盘根目录的menu.lst文件,看清楚里面的格式,对照格式加入以下内容:
title 启动 海蜘蛛路由系统 USB ***程序 (简体中文)
root (hd0,0)
kernel /hsrouter/boot/vmlinuz root=/dev/ram0
initrd /hsrouter/boot/initrd.gz
好了,海蜘蛛的功能就添加完毕了,已经测试绝对可用。
本人测试成功的ROS***的引导代码
title 启动 ROS2.9.27 ***
kernel /els/isolinux/linux
initrd /els/isolinux/initrd.rgz load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=6464 rw root=/dev/ram SETUP=u ( Thu, 25 Nov 2010 23:06:01 +0800 )
Description:
Linux检测硬盘坏道
  badblocks
  功能说明:检查磁盘装置中损坏的区块。
  语法:badblocks [-svw][-b ][-o ][磁盘装置][磁盘区块数][启始区块]
  补充说明:执行指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。
  参数:
  -b 指定磁盘的区块大小,单位为字节。
  -o 将检查的结果写入指定的输出文件。
  -s 在检查时显示进度。
  -v 执行时显示详细的信息。
  -w 在检查时,执行写入测试。
  [磁盘装置] 指定要检查的磁盘装置。
  [磁盘区块数] 指定磁盘装置的区块总数。
  [启始区块] 指定要从哪个区块开始检查。
  badblocks 检测磁盘坏块
  1)$badblocks -s //显示进度 -v //显示执行详细情况 /dev/sda1
  2)读写方式检测 未挂载的磁盘设备或分区
  $badblocks -s //显示进度 -w //以写去检测 -v //显示执行详细情况 /dev/sda2
( Sun, 8 Nov 2009 00:12:58 +0800 )
Description: 关于ROS的内网域名转向
首先我来解释一下这个关于 内网 的域名转向
其原理就是将在ros的端口转换设置那点把比如
域名的ip转向到我们 指定的 IP上来,也可以为我们内网的电影服务器(这样就可以把用花钱买域名也能在内网有域名使用了)
首先:
IP-DNS 我们添加一条DNS的转向。如下图
这里,第一条NAME:
这个域名是我随便找的个域名,准备用它来做内网访问的域名。而第二条例的 192.168.1.222就是我内网的电影服务器了。
第二:
在 IP-FIREWALL里面的 NAT 选项卡上,我们添加映射规则。如下图2
这里需要注意的是:src.addre 后面是我的内网网段192.168.1.0/24
dst.addre 后面是我填写的
的ip。ROS会将其域名自动转换为IP地址
协议为TCP,端口为全部。
在后边的ACT
ION选项卡上,如图3
第二项里面是我的内网服务器的ip地址
这样我们在内网由原来访问的电影服务器地址为 :
就变成了
如果你的服务器站点的端口不是80的话,比如
在访问的时候同样可以改成
仅仅限于内网使用。效果如下
( Tue, 13 Oct 2009 15:23:09 +0800 )
Description: 这个是因为LIST.ASP的图片设置不当造成的,你可以把它改成:
本文来自: 剑雪飘零(
) 详细出处参考: div cla ="img120box"
a href="movie.a ?id=%=RS("ID")%" title="%=rs("name")%"
img height="166" src='%=rs("img")%' alt='' width="127" border="0"/a
div cla ="img120txt"
div cla ="img120box"
a href="movie.a ?id=%=RS("ID")%" title="%=rs("name")%"
img height="160" src='%=rs("img")%' alt='' width="120" border="0"/a
div cla ="img120txt"
( Fri, 19 Jun 2009 14:42:37 +0800 )
Description:
1.作用
命令用来显示执行中的程序进程,使用权限是所有用户。
  2.格式
[-] [d delay] [q] [c] [S] [s] [i] [n]
  3.主要参数
  d:指定更新的间隔,以秒计算。
  q:没有任何延迟的更新。如果使用者有超级用户,则
命令将会以最高的优先序执行。
  c:显示进程完整的路径与名称。
  S:累积模式,会将己完成或消失的子行程的CPU时间累积起来。
  s:安全模式。
  i:不显示任何闲置(Idle)或无用(Zombie)的行程。
  n:显示更新的次数,完成后将会退出
  4.说明
命令是
系统管理的一个主要命令,通过它可以获得许多信息。这里我们结合图1来说明它给出的信息。
  第一行表示的项目依次为当前时间、系统运行时间、当前系统登录用户数目、1/5/10分钟系统平均负载(一般来说,这个负载值应该不太可能超过 1 才对,除非您的系统很忙碌。 如果持续高于 5 的话,那么.....仔细的看看到底是那个程序在影响整体系统吧!)。
  第二行显示的是所有启动的进程、目前运行、挂起 (Sleeping)的和无用(Zombie)的进程。(比较需要注意的是最后的 zombie 那个数值,如果不是 0 ,嘿嘿!好好看看到底是那个 proce 变成疆尸了吧?!)(stop模式:与sleep进程应区别,sleep会主动放弃cpu,而stop是被动放弃cpu ,例单步跟踪,stop(暂停)的进程是无法自己回到运行状态的)
  第三行显示的是目前CPU的使用情况,包括us用户空间占用CPU百分比、sy 内核空间占用CPU百分比、ni 用户进程空间内改变过优先级的进程占用CPU百分比(中断处理占用)、id 空闲CPU百分比、wa 等待输入输出的CPU时间百分比、hi,si,st 三者的意思目录还不清楚 :)
  第四行显示物理内存的使用情况,包括总的可以使用的内存、已用内存、空闲内存、缓冲区占用的内存。
  第五行显示交换分区使用情况,包括总的交换分区、使用的、空闲的和用于高速缓存的大小。
  第六行显示的项目最多,下面列出了详细解释。
  PID(Proce ID):进程标示号 ( 每个 proce 的 ID )
  USER:进程所有者的用户名 ( 该 proce 所属的使用者 )
  PR:进程的优先级别 ( Priority 的简写,程序的优先执行顺序,越小越早被执行 )
  NI:进程的优先级别数值 ( Nice 的简写,与 Priority 有关,也是越小越早被执行 )
  VIRT:进程占用的虚拟内存值。
  RES:进程占用的物理内存值。
  SHR:进程使用的共享内存值。
  S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
  %CPU:该进程占用的CPU使用率。
  %MEM:该进程占用的物理内存和总内存的百分比。
  TIME+:该进程启动后占用的总的CPU时间 ( CPU 使用时间的累加 )
  Command:进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行。
命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。
  <空格>:立刻刷新。
  P:根据CPU使用大小进行排序。
  T:根据时间、累计时间排序。
  q:退出
命令。
  m:切换显示内存信息。
  t:切换显示进程和CPU状态信息。
  c:切换显示命令名称和完整命令行。
  M:根据使用内存大小进行排序。
  W:将当前设置写入~/.toprc文件中。这是写
配置文件的推荐方法。
  可以看到,
命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。但是,它的缺点是会消耗很多系统资源。
  5.应用实例
  使用
命令可以监视指定用户,缺省情况是监视所有用户的进程。如果想查看指定用户的情况,在终端中按“U”键,然后输入用户名,系统就会切换为指定用户的进程运行界面。
  a.作用
  free命令用来显示内存的使用情况,使用权限是所有用户。
  b.格式
  free [-b -k -m] [-o] [-s delay] [-t] [-V]
  c.主要参数
  -b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。
  -s delay:显示每隔多少秒数来显示一次内存使用情况。
  -t:显示内存总和列。
  -o:不显示缓冲区调节列。
  d.应用实例
  free命令是用来查看内存使用情况的主要命令。和
命令相比,它的优点是使用简单,并且只占用很少的系统资源。通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。
  #free -b -s5
  使用这个命令后终端会连续不断地报告内存使用情况(以字节为单位),每5秒更新一次。
( Fri, 19 Jun 2009 14:40:45 +0800 )
Description:
修改linux的时间可以使用date指令
修改日期:
时间设定成2009年5月10日的命令如下:
#date -s 05/10/2009
修改时间:
将系统时间设定成上午10点18分0秒的命令如下。
#date -s 10:18:00
修改时区:
找到相应的时区文件 /usr/share/zoneinfo/Asia/Shanghai替换当前的/etc/localtime。
修改/etc/sysconfig/clock文件的内容为:
ZONE=”Asia/Shanghai”
UTC=false
ARC=false
同步bios时间:
同步BIOS时钟,强制把系统时间写入CMOS,命令如下:
#clock -w
date命令的功能是显示和设置系统日期和时间。
输入date 查看目前系统时间。
修改时间需要 date -功能字符 修改内容
命令中各选项的含义分别为:
-d datestr, --date datestr 显示由datestr描述的日期
-s datestr, --set datestr 设置datestr 描述的日期
-u, --universal 显示或设置通用时间
时间域
%H 小时(00..23)
%I 小时(01..12)
%k 小时(0..23)
%l 小时(1..12)
%M 分(00..59)
%p 显示出AM或PM
%r 时间(hh:mm: AM或PM),12小时
%s 从1970年1月1日00:00:00到目前经历的秒数
%S 秒(00..59)
%T 时间(24小时制)(hh:mm: )
%X 显示时间的格式(%H:%M:%S)
%Z 时区 日期域
%a 星期几的简称( Sun..Sat)
%A 星期几的全称( Sunday..Saturday)
%b 月的简称(Jan..Dec)
%B 月的全称(January..December)
%c 日期和时间( Mon Nov 8 14:12:46 CST 1999)
%d 一个月的第几天(01..31)
%D 日期(mm/dd/yy)
%h 和%b选项相同
%j 一年的第几天(001..366)
%m 月(01..12)
%w 一个星期的第几天(0代表星期天)
%W 一年的第几个星期(00..53,星期一为第一天)
%x 显示日期的格式(mm/dd/yy)
%y 年的最后两个数字( 1999则是99)
%Y 年(例如:1970,1996等)
需要特别说明的是,只有超级用户才能用date命令设置时间,一般用户只能用date命令显示时间。
例1:用指定的格式显示时间。
$ date '+This date now is =%x ,time is now =%X ,thank you !'
This date now is =11/12/99 ,time is now =17:53:01,thank you !
例2:用预定的格式显示当前的时间。
Fri Nov 26 15:20:18 CST 1999
例3:设置时间为下午14点36分。
# date -s 14:36:00
Fri Nov 26 14:15:00 CST 1999
例4:设置时间为1999年11月28号。
# date -s 991128
Sun Nov 28 00:00:00 CST 1999
实例:设置时间伟2008年8月8号12:00
# date -s "2008-08-08 12:00:00"
修改完后,记得输入:clock -w
把系统时间写入CMOS
( Fri, 5 Jun 2009 17:20:00 +0800 )
Description:
1。青岛恒信一卡通无法打开网卡解决方案
经过测试,一卡通无法打开网卡是因为和ARP免疫补丁有冲突。
解决方法:将以下代码复制到记事本,将后缀名改为 reg 导入即可。
Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ldkflt]
2。青岛恒信一卡通,开机后不锁屏的解决方法
把这个命令放在开机通道的最前面!
@echo off
tasklist|find /i "RunMe.exe"> ul&am am goto jump
cd /d "C:\Program Files\HC\hCard"
start RunMe.exe
:jump 3.一卡通在网众无盘终端提示无法打开网卡 删除WINDOWS\system32\drivers\下 nx tat 驱动文件即可
( Wed, 27 May 2009 14:40:25 +0800 )
Description:
我是ZLFABLE 大家好 我想大家应该还记得前两天我针对大家的安全中心自
定义列表送出的东西
这两天我看论坛上因为CGO的文件错误而提问的小兄弟们不少 我就给大家解释一下 希望对大家有些帮助
大家大部分都在使用RAID了吧?而且我看很多朋友都在使用RAID0 也有用单盘的朋友 那么CGO倒底多大才好呢?
下面我给大家解答一下
使用单盘与RAID0的朋友 请你们的CGO单文件容量不要大于1024M X 200也就是200G 主要原因是单盘与RAID0是没有
使用到磁盘的数据校验的 NTFS格式单文件最大理论支持2TB 分区也是理论支持2TB 但因为CGO使用的单文件是会经常
进行数据修改的 所以就我的经验 200G以下 应该没有大问题
在这里我建议有条件的朋友使用3块物理盘以上组RAID5 因为他使用了数据校验技术 所以可以放心的使用 以我的经验
300G的单文件就算你经验进行数据变动 也是完全没有问题的
关键的问题不是支持多大,而是高负荷的数据变动! RAID5完全解决了这一问题 而RAID5的技术原理是什么 就请大家多
用用搜索了
最后再给大家提个醒 你的NTFS的文件格式优化了么!?怎么优化大家还是去搜索! askystar 引借帖子
结贴时间:2009-5-14 11:39
在硬件设备相同的情况下,文件系统是影响电脑运行速度一个重要的因素。目前个人系统之中推荐使用的文件系统格式是
NTFS。为了让NTFS文件系统对提高系统性能有更好的帮助,我们可以对其进行必要的优化。
  一、关闭访问时标
  我们打开NTFS分区内任意一个文件的属性,可以在其“常规”标签中看到文件的创建时间、修改时间和最后一次的
访问时间。如果分区内文件数量比较多,并且目录结构有多层,那么每次访问或修改都会更新这些时标信息。对此,我们
可以通过修改注册表的方法来禁止更新该项操作。
  运行“regedit”后打开注册表编辑器,然后找到HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Control\FileSystem,双击右侧的 “Ntfsdisablelasta e update”,将其值改为“1”即可。
  二、禁止8.3名称格式
  在Windows早期的操作系统,尤其是DOS系统之中,文件命名一直采取8.3的格式。在Windows XP的NTFS分区中,
已经没有这个限制。但是我们切换到命令提示符窗口中,你会发现文件主名超出8个字符的则会被~符号代替。对此,我
们可以在注册表上述键值下找到NtfsDisable8dot3NameCreation,将其值设为1,这样即可禁止Windows XP的NTFS分区
应用8.3格式了。
  三、优化主文件表
  主文件表里保存了磁盘上的文件索引信息,随着硬件文件数量的不断增加,主文件表存储空间也会随之增长,其碎片
也不可避免。对此,专家提醒我们同样可以通过修改注册表来增加其存储空间,以避免碎片的产生。
  打开注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,双击其中的
NtfsMftzonereservation的Dword键,将其值设为3或4即可。 关于CGO出盘速度问题
CGO出盘的速度 取决与您的局域网 网络速度 如交换机速度 牌子 还有服务器的网卡速度牌子及客户机的网卡速度 纯
千M网络 主干交换机烂的话速度也一般 但换个好的主交换速度也能提升一个明显的档次 虚拟盘游戏读取速度以及访问
速度明显提升 另外一点就是虚拟盘区块簇大小 这个也关系着客户机出盘的速度 如果是千百兆网络的话 还是建议将服务
端虚拟盘格式化为32K簇 区块为理想 纯千M网络一般不用 默认就可以 我一直在用32K簇区块大小 速度挺好 最近虚拟
盘老出文件损坏错误等问题 重换系统把区块格成WINDOWS默认的了(4096就是WIN默认区块大小)要看你的区块大小
是多少 点虚拟盘点下右键在点格式化 就能看见当前区块大小了(分配单元大小就是当前的区块大小)如果当初格式化的
区块大小不是WIN默认可选的几个区块大小的话 在分配单元大小那里 就会显示 默认配制大小
具体将CGO加载后的虚拟盘格式化为32K区块的 DOS命令为:
format x:/fs:ntfs /a:32k
将以上命令保存为BAT或复制命令以后需要时在用 用发就不用多说了吧 在开始运行里输入这个命令即可 命令里的X:为
要格式化并改为32K簇区块大小的虚拟盘 请根据自己实际情况更改
注意这是格式化并且分为32K区块 有的朋友注意了 用这命令时请备份好数据 引至:
( Tue, 26 May 2009 21:39:28 +0800 )
Description:
其实不是什么注册表的问题,是镜像文件做的有问题。其实所有的虚拟盘软件都一样,比如iscsi,锐起。只是磁盘格式化的区块大小的问题。用raid盘的清看看你的raid的区块大小,是32k,64k,128k,只要把镜像文件格式化的时候格成至少32k的区块,问题就解决了。另外请看一下客户机的开机流量,要是1个盘开机流量在7-8兆的,开机肯定慢,人上多了肯定卡。把镜像文件重新格式化成32k区块的,不要在盘符上点右键去格式化,要在cmd下用format,
格式 format x:/fs:ntfs /a:32k 前面的盘符自己换,后面的参数自己看format的帮助 引用之墨鱼博客:
( Sat, 16 May 2009 15:59:53 +0800 )
Description:
鉴于最近快播软件导致使用ROS网吧做路由的网吧频繁掉线,监视软件运行所需解析IP及端口可在防火墙做如下设置!
/ ip firewall filter
add chain=forward content=www.qvod.com action=reject comment="No QVOD"
add chain=forward content=qvod.com action=reject
add chain=forward protocol=tcp dst-port=40645 action=drop
add chain=forward protocol=udp dst-port=40645 action=drop
add chain=forward protocol=tcp dst-port=7353 action=drop
add chain=forward protocol=udp dst-port=7353 action=drop
add chain=forward protocol=tcp dst-port=1381-1475 action=drop
add chain=forward protocol=udp dst-port=1381-1475 action=drop
add chain=forward src-addre =61.139.219.204 action=drop disabled=no
add chain=forward dst-addre =61.139.219.204 action=drop disabled=no
add chain=forward src-addre =114.80.100.85 action=drop disabled=no
add chain=forward dst-addre =114.80.100.85 action=drop disabled=no
add chain=forward src-addre =76.73.4.101 action=drop disabled=no
add chain=forward dst-addre =76.73.4.101 action=drop disabled=no
add chain=forward src-addre =222.80.240.180 action=drop disabled=no
add chain=forward dst-addre =222.80.240.180 action=drop disabled=no
add chain=forward src-addre =222.80.155.82

参考资料

 

随机推荐