分类: Oracle
2011-05-30 09:36:52
移植OCFS数据文件到OCFS2
52、我能以OCFS2的形式mount OCFS卷吗?
不能,OCFS和OCFS2在磁盘上是不兼容的,因为我们需要在今后的版本中增加新的特性。
53、OCFS2和OCFS能同时挂载到同一台机器上吗?
不能,OCFS只能工作在内核是2.4(Red Hat's AS2.1/EL3 and SuSE's SLES8).OCFS2工作的内核版本为2.6(RHEL4, SLES9 and SLES10).
54、我可以在内核版本为2.6的机器上访问OCFS卷吗?
可以的,你可以通过FSCat 、fsls 或者fscp工具来访问OCFS卷,这些工具可以,以上工具可以在设备级浏览、复制文件到其他的文件系统,FSCat工具可以在oss.oracle.com上得到。
55、我可以改变我的OCFS卷成为OCFS2吗?
不能。
56、有什么快速的方法将OCFS的数据转移到OCFS2上?
最快的方式无非就是完成最少的拷贝,如果你有一个非OCFS的卷上有当前的备份的话你可以直接进行恢复性的转移,如果你没有一个可用的备份,当时你的OCFS2系统上可以访问OCFS的卷,你可以使用FSCat工具来将数据拷贝到OCFS2上
COREUTILS
57、我可以像OCFS(第一版)中设置o_direct参数去允许copymvtar等命令?
不用,OCFS2不需要设置此参数,OCFS2文件系统本身就允许的。
通过NFS输出
58、我能通过NFS服务器来构建OCFS2文件 系统吗?
可以的,你可以通过标准的LINUX NFS服务器来搭建 OCFS2文件系统,但是你要注意只有NFS的版本3和以上的版本可以运行,言外之意就是前段的内核版本必须是2.4或者以上版本。
59、针对NFS V2版本有相应的解决方案吗?
NFS V2也可以工作的,但是服务端应该设置no_subtree_check参数,但是 这样会涉及到一些安全上的因素。
诊断
60、我如何打开和关闭文件系统的跟踪?
显示所有信息
# debugfs.ocfs2 -l
设置允许跟踪支持
# debugfs.ocfs2 -l SUPER allow
设置关闭跟踪支持
debugfs.ocfs2 -l SUPER off
完全关闭支持
# debugfs.ocfs2 -l SUPER deny
打开心跳跟踪
# debugfs.ocfs2 -l HEARTBEAT ENTRY EXIT allow
关闭心跳跟踪
# debugfs.ocfs2 -l HEARTBEAT off ENTRY EXIT deny
61、我如何得到文件系统的锁以及它们的结构?
OCFS2 1.0.9+含有此项功能:
mount debugfs挂载在以下位置 /debug (EL4) or /sys/kernel/debug (EL5).
# mount -t debugfs debugfs /debug
或者
# mount -t debugfs debugfs /sys/kernel/debug
导出锁:
# echo "fs_locks" | debugfs.ocfs2 /dev/sdX >/tmp/fslocks
62、我如何读懂通过fs_locks输出的内容?
以下为一个输出的示例:
Lockres: M000000000000000006672078b84822 Mode: Protected Read
Flags: Initialized Attached
RO Holders: 0 EX Holders: 0
Pending Action: None Pending Unlock Action: None
Requested Mode: Protected Read Blocking Mode: Invalid
首先我们看到的是Lockers,这也是锁名,锁名和锁类型是联合在一起的 , (S superblock, M metadata, D filedata, R rename, W readwrite)
我们可以通过锁名,得到inode 名和generation:
#echo "stat " | debugfs.ocfs2 -n /dev/sdX
Inode: 419616 Mode: 0666 Generation: 2025343010 (0x78b84822)
....
将锁名映射到一个目录实体:
# echo "locate " | debugfs.ocfs2 -n /dev/sdX
419616 /linux-2.6.15/arch/i386/kernel/semaphore.c
还可以只提供一个inode 号:
# echo "locate <419616>" | debugfs.ocfs2 -n /dev/sdX
419616 /linux-2.6.15/arch/i386/kernel/semaphore.c
从一个目录实体中得到锁名:
# echo "encode /linux-2.6.15/arch/i386/kernel/semaphore.c" | debugfs.ocfs2 -n /dev/sdX
M000000000000000006672078b84822 D000000000000000006672078b84822 W000000000000000006672078b84822
同一个资源上第一个是Metadata锁,接着是Data锁,最后是ReadWrite锁,这DLM支持3种锁类型:NL no lock,PR protected read,EX exclusive
如果你遇到了DLM hang,此时的资源状态将会是“Busy”。
接下来我们查询资源的DLM
说明:dlm指静默的跟踪、诊断
在做dlm 跟踪的时候 ,首先要知道dlm domain,以及每个卷的UUID.
# echo "stats" | debugfs.ocfs2 -n /dev/sdX | grep UUID: | while read a b ; do echo $b ; done
82DA8137A49A47E4B187F74E09FBBB4B
接下来执行:
# echo R dlm_domain lockname > /proc/fs/ocfs2_dlm/debug
例如:
# echo R 82DA8137A49A47E4B187F74E09FBBB4B M000000000000000006672078b84822 > /proc/fs/ocfs2_dlm/debug
# dmesg | tail
struct dlm_ctxt: 82DA8137A49A47E4B187F74E09FBBB4B, node=79, key=965960985
lockres: M000000000000000006672078b84822, owner=75, state=0 last used: 0, on purge list: no
granted queue:
type=3, conv=-1, node=79, cookie=11673330234144325711, ast=(empty=y,pend=n), bast=(empty=y,pend=n)
converting queue:
blocked queue:
以上信息显示了节点75获得了资源,79获得了PR锁。
限制
63、在某一个目录下的子目录是否有限制?
OCFS2的目前允许最多32000个子目录。虽然这种限制可能会增加,我们不会那样做,直到我们实现某种类型的高效名称查找(htree等)。
64、ocfs2的文件大小有没有限制?
有的,目前的软件解决了32位的块数。因此,文件系统设备是有限的(2 ^ 32)*块(见的mkfs - b)项。有了这个4KB的块大小相当于一个16TB的文件系统。此块寻址限制将放宽在未来的软件。在这一点上的限制成为解决与32位这导致了4PB 1MB的每一个文件系统集群。
系统文件
65、说明是文件系统?
系统文件时用于存储标准的文件,可以通过执行debugfs.ocfs2工具查看系统文件:
# echo "ls -l //" | debugfs.ocfs2 -n /dev/sdX
18 16 1 2 .
18 16 2 2 ..
19 24 10 1 bad_blocks
20 32 18 1 global_inode_alloc
21 20 8 1 slot_map
22 24 9 1 heartbeat
23 28 13 1 global_bitmap
24 28 15 2 orphan_dir:0000
25 32 17 1 extent_alloc:0000
26 28 16 1 inode_alloc:0000
27 24 12 1 journal:0000
28 28 16 1 local_alloc:0000
29 3796 17 1 truncate_log:0000
第一列列出的是块个数。
66、为什么在以上的输出中有的后面有数字?
这里有两种类型的文件,global和local,global文件是为了所有的节点,像local类型的: journal:0000,代表的是指定的节点,最后的数字是slot#,可以执行以下操作列出slot映射的部分:
# echo "slotmap" | debugfs.ocfs2 -n /dev/sdX
Slot# Node#
0 39
1 40
2 41
3 42
心跳