[20150930]linux ln建立硬连接.txt
--前几天同事在建立测试环境时磁盘空间不足,而另外一个空间磁盘空间充足,我说可以通过ln建立软连接来解决这个问题。
--这让我想起我以前管理数据库通过ln建立硬连接来避免oracle数据文件的删除,虽然现在我现在不用这种方式,不过还是做一些简单介
--绍.
1.关于linux的ln命令我不做介绍,自己看看手册。
--仅仅说明一点,做硬链接不能跨文件系统。
2.实际上很简单,我拿测试环境做一次。
RMAN> report schema;
using target database control file instead of recovery catalog
Report of database schema
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 510 SYSTEM *** /mnt/ramdisk/test/system01.dbf
2 350 UNDOTBS1 *** /mnt/ramdisk/test/undotbs01.dbf
3 370 SYSAUX *** /mnt/ramdisk/test/sysaux01.dbf
4 100 USERS *** /mnt/ramdisk/test/users01.dbf
5 100 EXAMPLE *** /mnt/ramdisk/test/example01.dbf
6 15 MSSM *** /mnt/ramdisk/test/mssm01.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1 18 TEMP 32767 /mnt/ramdisk/test/test01.dbf
$ mkdir -p /mnt/ramdisk/.test
$ ln /mnt/ramdisk/test/* /mnt/ramdisk/.test/ --*/
--这样就完成了硬连接的建立,当然你可以1个1个建立。
$ cd /mnt/ramdisk/.test/
$ ll -li
total 1678356
47643 -rw-r----- 2 oracle oinstall 7389184 2015-09-30 10:52:05 control01.ctl
47644 -rw-r----- 2 oracle oinstall 7389184 2015-09-30 10:52:05 control02.ctl
47645 -rw-r----- 2 oracle oinstall 7389184 2015-09-30 10:52:05 control03.ctl
47646 -rw-r----- 2 oracle oinstall 104865792 2015-09-30 10:49:34 example01.dbf
47647 -rw-r----- 2 oracle oinstall 16654336 2015-09-30 10:49:34 mssm01.dbf
47648 -rw-r----- 2 oracle oinstall 52429312 2015-09-30 10:49:34 redo01.log
47649 -rw-r----- 2 oracle oinstall 52429312 2015-09-30 10:49:36 redo02.log
47650 -rw-r----- 2 oracle oinstall 52429312 2015-09-30 10:49:36 redo03.log
47651 -rw-r----- 2 oracle oinstall 387981312 2015-09-30 10:49:34 sysaux01.dbf
47652 -rw-r----- 2 oracle oinstall 534781952 2015-09-30 10:49:34 system01.dbf
47653 -rw-r----- 2 oracle oinstall 20979712 2015-09-30 10:48:53 temp01.dbf
47654 -rw-r----- 2 oracle oinstall 18882560 2015-09-30 10:48:53 test01.dbf
47655 -rw-r----- 2 oracle oinstall 367009792 2015-09-30 10:49:34 undotbs01.dbf
47656 -rw-r----- 2 oracle oinstall 104865792 2015-09-30 10:49:34 users01.dbf
$ cd /mnt/ramdisk/test
$ ll -li
total 1678356
47643 -rw-r----- 2 oracle oinstall 7389184 2015-09-30 10:52:23 control01.ctl
47644 -rw-r----- 2 oracle oinstall 7389184 2015-09-30 10:52:23 control02.ctl
47645 -rw-r----- 2 oracle oinstall 7389184 2015-09-30 10:52:23 control03.ctl
47646 -rw-r----- 2 oracle oinstall 104865792 2015-09-30 10:49:34 example01.dbf
47647 -rw-r----- 2 oracle oinstall 16654336 2015-09-30 10:49:34 mssm01.dbf
47648 -rw-r----- 2 oracle oinstall 52429312 2015-09-30 10:49:34 redo01.log
47649 -rw-r----- 2 oracle oinstall 52429312 2015-09-30 10:49:36 redo02.log
47650 -rw-r----- 2 oracle oinstall 52429312 2015-09-30 10:49:36 redo03.log
47651 -rw-r----- 2 oracle oinstall 387981312 2015-09-30 10:49:34 sysaux01.dbf
47652 -rw-r----- 2 oracle oinstall 534781952 2015-09-30 10:49:34 system01.dbf
47653 -rw-r----- 2 oracle oinstall 20979712 2015-09-30 10:48:53 temp01.dbf
47654 -rw-r----- 2 oracle oinstall 18882560 2015-09-30 10:48:53 test01.dbf
47655 -rw-r----- 2 oracle oinstall 367009792 2015-09-30 10:49:34 undotbs01.dbf
47656 -rw-r----- 2 oracle oinstall 104865792 2015-09-30 10:49:34 users01.dbf
--ls -li i参数是显示文件i节点号。对比上下是一样的。
3.你还可以做一些加固:
# chown root:root .test
# chmod 444 .test
--这样oracle用户根本无法进入/mnt/ramdisk/.test目录
$ cd /mnt/ramdisk/.test
-bash: cd: /mnt/ramdisk/.test: Permission denied
--因为/mnt/ramdisk/.test仅仅有读权限,oracle用户也无法删除里面的文件。而数据库正常运行。
$ rm /mnt/ramdisk/.test/control01.ctl
/bin/rm: cannot remove `/mnt/ramdisk/.test/control01.ctl': Permission denied
--你还可以使用chattr +i 加固.test目录(仅仅对ext2以上文件系统有效),这样root用户也无法增加文件,删除文件【注意能修改文件内
--容或者覆盖文件】
4.当然这种方式不是没有缺点:
--数据文件还是在同一个文件系统下,这个好比全部鸡蛋放在一个篮子里面,仅仅能够防止一些误操作。
--而且在增加数据文件的情况下,也需要手工加入对应目录,管理上须人工干预。