<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog-boxcorea &#187; raidz</title>
	<atom:link href="http://blog.boxcorea.com/wp/archives/tag/raidz/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.boxcorea.com/wp</link>
	<description>Simple is Beautiful!</description>
	<lastBuildDate>Thu, 02 Feb 2012 06:45:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>zfs 사용기?</title>
		<link>http://blog.boxcorea.com/wp/archives/129</link>
		<comments>http://blog.boxcorea.com/wp/archives/129#comments</comments>
		<pubDate>Tue, 27 May 2008 06:49:28 +0000</pubDate>
		<dc:creator>poss</dc:creator>
				<category><![CDATA[Application(어플리케이션)]]></category>
		<category><![CDATA[Solaris(솔라리스)]]></category>
		<category><![CDATA[raidz]]></category>
		<category><![CDATA[solaris10]]></category>
		<category><![CDATA[zfs]]></category>
		<category><![CDATA[zpool]]></category>

		<guid isPermaLink="false">http://blog.boxcorea.com/wp/?p=129</guid>
		<description><![CDATA[오랫동안 사용하던 E450이 문제가 있어서 수리를 하면서, 그동안 사용하던 solaris9를 solaris10으로 다시 설치했다. disksuit로 구성을 하려다가 오래전에 본 비디오가 생각나서 zfs로 구성을 해 보기로 했다. 개념은 굉장히 간단하며, 사용방법 또한 metadb를 구성하는 것보다 간단하다. 하지만, 아직 확실한 개념 정립이 되지 않아서&#8230; 사용하는 디스크는 모두 6개로, 9GB 3개와 18GB 3개다. 9GB 1개는 OS를 설치했고, 나머지는 모두 사용하지 [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>오랫동안 사용하던 E450이 문제가 있어서 수리를 하면서, 그동안 사용하던 solaris9를 solaris10으로 다시 설치했다. disksuit로 구성을 하려다가 오래전에 본 비디오가 생각나서 zfs로 구성을 해 보기로 했다.</p></blockquote>
<p>개념은 굉장히 간단하며, 사용방법 또한 metadb를 구성하는 것보다 간단하다. 하지만, 아직 확실한 개념 정립이 되지 않아서&#8230;</p>
<p><span id="more-129"></span></p>
<p>사용하는 디스크는 모두 6개로, 9GB 3개와 18GB 3개다. 9GB 1개는 OS를 설치했고, 나머지는 모두 사용하지 않는 상태다. 디스크는 아래와 같다</p>
<blockquote><p>bash-3.00# format<br />
Searching for disks&#8230;done<br />
AVAILABLE DISK SELECTIONS:<br />
       0. c0t0d0 &lt;SUN9.0G cyl 4924 alt 2 hd 27 sec 133&gt;<br />
          <a>/pci@1f,4000/scsi@3/sd@0,0</a><br />
       1. c0t1d0 &lt;FUJITSU-MAE3091L SUN9.0G-0706-8.43GB&gt;<br />
          <a>/pci@1f,4000/scsi@3/sd@1,0</a><br />
       2. c0t2d0 &lt;IBM-DDRS39130SUN9.0G-S98E-8.43GB&gt;<br />
          <a>/pci@1f,4000/scsi@3/sd@2,0</a><br />
       3. c2t0d0 &lt;FUJITSU-MAG3182L SUN18G-1111-16.87GB&gt;<br />
          <a>/pci@1f,4000/scsi@4/sd@0,0</a><br />
       4. c3t2d0 &lt;SEAGATE-ST318203LSUN18G-034A-16.87GB&gt;<br />
          <a>/pci@1f,4000/scsi@4,1/sd@2,0</a><br />
       5. c3t3d0 &lt;SEAGATE-ST318203LC-0002-16.96GB&gt;<br />
          <a>/pci@1f,4000/scsi@4,1/sd@3,0</a><br />
Specify disk (enter its number):</p></blockquote>
<p>먼저, zpool을 사용하여 디스크 풀(이름은 fox_pool로 했다)을 만든다. (18GB 짜리 3개)</p>
<blockquote><p>#zpool create fox_pool c2t0d0 c3t2d0 c3t3d0</p>
<p>#zpool list<br />
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT<br />
fox_pool               58.8G    102K   58.7G     0%  ONLINE     -</p></blockquote>
<p>9GB 디스크를 하나 더 추가했다.</p>
<blockquote><p> #zpool add -f fox_pool c0t2d0</p></blockquote>
<p>예전의 disk suit이 디스크 size에 민감했던 반면에, zfs는 디스크 size가 달라도 잘 추가가 된다.  상태를 확인해보면,</p>
<blockquote><p># zpool status<br />
  pool: fox_pool<br />
 state: ONLINE<br />
 scrub: none requested<br />
config:</p>
<p>        NAME        STATE     READ WRITE CKSUM<br />
        fox_pool    ONLINE       0     0     0<br />
          c2t0d0    ONLINE       0     0     0<br />
          c3t2d0    ONLINE       0     0     0<br />
          c3t3d0    ONLINE       0     0     0<br />
          c0t2d0    ONLINE       0     0     0</p>
<p>errors: No known data errors</p></blockquote>
<p>이렇게  pool을 생성하면 /에 pool이름이 자동으로 마운트되어 사용가능한 상태가 된다. 이게 영 맘에 안들어서 zpool destroy로 만든 pool을 삭제하고 다시 생성했다(마운트하는 방법을 몰라서&#8230; ;ㅡㅡ)</p>
<blockquote><p>#zpool create -f -m /export/home fox_pool c2t0d0 c3t2d0 c3t3d0 c0t2d0</p></blockquote>
<p>그런데, 이것이 굳이 이럴 필요가 있는것인지 알 수가 없다. 왜냐하면, zfs 로  /export/home 에 zfs를 마운트할 수 있기 때문이다. 즉, 하나의 디스크 풀을 각기 다른 디렉토리에 마운트 할 수 있는것 같다. 그래서 oracle 프로그램용으로 zfs를 생성해서 마운트 해보았다.</p>
<blockquote><p> #zfs create fox_pool/oracle mount /oracle  &#8212;&gt; error</p>
<p>#zfs create fox_pool/oracle</p>
<p># zfs list<br />
NAME              USED  AVAIL  REFER  MOUNTPOINT<br />
fox_pool          130K  57.8G    31K  /export/home<br />
fox_pool/oracle  24.5K  57.8G  24.5K  /export/home/oracle</p></blockquote>
<p>생성은 잘 되었지만, 문제가 있다. 나는 oracle을 /에 마운트 하고 싶은 것이다.</p>
<blockquote><p># zfs destroy fox_pool/oracle<br />
# zfs list<br />
NAME       USED  AVAIL  REFER  MOUNTPOINT<br />
fox_pool  99.5K  57.8G    30K  /export/home</p></blockquote>
<p>그래서 삭제를 해 버렸다.</p>
<p>여기서 어떻게 해야할지 모르겠다&#8230;&#8230;   자, 답을 알아냈다</p>
<blockquote><p>#zfs create fox_pool/oracle<br />
#zfs set mountpoint=/oracle fox_pool/oracle</p></blockquote>
<p>마운트 포인트를 변경하니 해결이 된다.</p>
<p>자, 여기서, 일부러 에러를 유발하여 복구시켜보았다.</p>
<blockquote><p>#dd if=/dev/urandom of=/dev/c3t3d0s0 bs=1024 count=10000</p></blockquote>
<p>s0는 디스크들의 정보가 기록되는 슬라이스로 보이는데, 이곳을 쓰레기 값으로 채워넣은 것이다.</p>
<blockquote><p>#zpool scrub fox_pool</p></blockquote>
<p>이 에러는 복구가 되지 않았다. 사실 내가 원하는것은 이것이 아니었다. 그 후 여러번의 시행 착오를 거쳐서 알아낸 것은, zpool 생성시 어떤 옵션도 주지 않으면 디스크들이 stripe 로 묶이는 것이며, mirror 옵션을 주던가 아니면 가장 중요한, raidz 옵션을 주는 것이다.  사실 내가 원하던 것은 Raid5 였다.  mirror도 좋지만, 디스크 두개중 한개밖에 사용할 수 없으니까.</p>
<p>아무튼, Raid-Z 로 디스크를 구성했다. Raid5와 다른점은 디스크 두개로도 구성이 가능하다는 점이다. 사실 이 경우는 mirror와 별 차이가 없는것 같다.</p>
<blockquote><p># zpool create fox_pool raidz c2t0d0 c3t2d0      <br />
# zpool status<br />
  pool: fox_pool<br />
 state: ONLINE<br />
 scrub: none requested<br />
config:</p>
<p>        NAME        STATE     READ WRITE CKSUM<br />
        fox_pool    ONLINE       0     0     0<br />
          raidz1    ONLINE       0     0     0<br />
            c2t0d0  ONLINE       0     0     0<br />
            c3t2d0  ONLINE       0     0     0</p>
<p>errors: No known data errors<br />
# df -h</p>
<p>fox_pool                16G    24K    16G     1%    /fox_pool</p>
<p># zpool list<br />
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT<br />
fox_pool               33.5G    178K   33.5G     0%  ONLINE     -</p></blockquote>
<p>두 개의 디스크에 다시 에러를 유발시킨다. 여기서는 두번째 디스크 c3t2d0s0에 쓰레기값을 넣었다.</p>
<blockquote><p># zpool scrub fox_pool<br />
# zpool status<br />
  pool: fox_pool<br />
 state: ONLINE<br />
status: One or more devices has experienced an unrecoverable error.  An<br />
        attempt was made to correct the error.  Applications are unaffected.<br />
action: Determine if the device needs to be replaced, and clear the errors<br />
        using &#8216;zpool clear&#8217; or replace the device with &#8216;zpool replace&#8217;.<br />
   see: <a href="http://www.sun.com/msg/ZFS-8000-9P">http://www.sun.com/msg/ZFS-8000-9P</a><br />
 scrub: scrub completed with 0 errors on Tue May 27 22:00:49 2008<br />
config:</p>
<p>        NAME        STATE     READ WRITE CKSUM<br />
        fox_pool    ONLINE       0     0     0<br />
          raidz1    ONLINE       0     0     0<br />
            c2t0d0  ONLINE       0     0     0<br />
            c3t2d0  ONLINE       0     0    <span style="#ff0000;">27</span></p>
<p>errors: No known data errors</p></blockquote>
<p>에러를 수정하는 방법에는 두가지가 있다. clear나 replace하는 방법이다. 나는 디스크가 하나 더 있기때문에, replace했다.</p>
<blockquote><p>#zpool replace fox_pool c3t2d0 c3t3d0<br />
# zpool status<br />
  pool: fox_pool<br />
 state: ONLINE<br />
 scrub: resilver completed with 0 errors on Tue May 27 22:02:22 2008<br />
config:</p>
<p>        NAME           STATE     READ WRITE CKSUM<br />
        fox_pool       ONLINE       0     0     0<br />
          raidz1       ONLINE       0     0     0<br />
            c2t0d0     ONLINE       0     0     0<br />
           <span style="#ff0000;"> replacing</span>  ONLINE       0     0     0<br />
              c3t2d0   ONLINE       0     0    27<br />
              c3t3d0   ONLINE       0     0     0</p>
<p>errors: No known data errors</p></blockquote>
<p>잠시후 확인해보면 디스크가 바뀌어 있는것을 확인 할 수 있다.</p>
<blockquote><p> zpool status<br />
  pool: fox_pool<br />
 state: ONLINE<br />
 scrub: scrub completed with 0 errors on Tue May 27 22:09:20 2008<br />
config:</p>
<p>        NAME        STATE     READ WRITE CKSUM<br />
        fox_pool    ONLINE       0     0     0<br />
          raidz1    ONLINE       0     0     0<br />
            c2t0d0  ONLINE       0     0     0<br />
            <span style="#ff0000;">c3t3d0</span>  ONLINE       0     0     0</p>
<p>errors: No known data errors</p>
<p> </p></blockquote>
<p> fox_pool에 남은 c3t2d0를 추가하기 위하여 zpool add명령을 사용했다.</p>
<p>결과는 별로다. 디스크가 raidz로 추가되는 것이 아니라, 기존의 raidz1과 stripe로 묶여버린 것이다. 물론, raidz 옵션을 추가할때 넣어봤지만, 이경우역시 작동되지 않았다.</p>
<blockquote><p># zpool status<br />
  pool: fox_pool<br />
 state: ONLINE<br />
 scrub: none requested<br />
config:</p>
<p>        NAME        STATE     READ WRITE CKSUM<br />
        fox_pool    ONLINE       0     0     0<br />
          <span style="#ff0000;">raidz1</span>    ONLINE       0     0     0<br />
            c2t0d0  ONLINE       0     0     0<br />
            c3t3d0  ONLINE       0     0     0<br />
          <span style="#ff0000;">c3t2d0</span>    ONLINE       0     0     0</p>
<p>errors: No known data errors</p></blockquote>
<p> 그래서 다시 디스크 세개로 fox_pool을 생성하였으며, 역시 에러를 유발한 후 테스트 하였다.</p>
<blockquote><p># zpool scrub fox_pool<br />
# zpool status<br />
  pool: fox_pool<br />
 state: ONLINE<br />
status: One or more devices has experienced an unrecoverable error.  An<br />
        attempt was made to correct the error.  Applications are unaffected.<br />
action: Determine if the device needs to be replaced, and clear the errors<br />
        using &#8216;zpool clear&#8217; or replace the device with &#8216;zpool replace&#8217;.<br />
   see: <a href="http://www.sun.com/msg/ZFS-8000-9P">http://www.sun.com/msg/ZFS-8000-9P</a><br />
 scrub: scrub completed with 0 errors on Tue May 27 21:44:42 2008<br />
config:</p>
<p>        NAME        STATE     READ WRITE CKSUM<br />
        fox_pool    ONLINE       0     0     0<br />
          raidz1    ONLINE       0     0     0<br />
            c2t0d0  ONLINE       0     0     0<br />
            c3t2d0  ONLINE       0     0     0<br />
            c3t3d0  ONLINE       0     0    <span style="#ff0000;">38</span></p>
<p>errors: No known data errors</p></blockquote>
<p>같은방식으로 에러를 유발했다. c3t3d0의 체크섬이 38이다. 이것은 아래 명령으로 수정가능하다.</p>
<blockquote><p>bash-3.00# zpool clear fox_pool c3t3d0<br />
bash-3.00# zpool status<br />
  pool: fox_pool<br />
 state: ONLINE<br />
 scrub: scrub completed with 0 errors on Tue May 27 21:44:42 2008<br />
config:</p>
<p>        NAME        STATE     READ WRITE CKSUM<br />
        fox_pool    ONLINE       0     0     0<br />
          raidz1    ONLINE       0     0     0<br />
            c2t0d0  ONLINE       0     0     0<br />
            c3t2d0  ONLINE       0     0     0<br />
            c3t3d0  ONLINE       0     0     <span style="#ff0000;">0</span></p>
<p>errors: No known data errors</p></blockquote>
<p>다음은 snapshot을 만들어 보았다. snapshot은 만드는 시점의 데이타를 한번만 반영하는것 같다. 말 그대로 스냅샷을 수행하던 시점의 백업을 만드는 것 같다.</p>
<p>fox_pool에 zfs로 화일시스템을 만들고 세개의 화일(test.txt, last.txt, words)을 생성했다.  그리고 스냅샷을 만들었다.</p>
<blockquote><p># ls -al<br />
total 576<br />
drwxr-xr-x   2 root     sys            5 May 27 22:26 .<br />
drwxr-xr-x   3 root     sys            3 May 27 22:25 ..<br />
-rw-r&#8211;r&#8211;   1 root     root        7105 May 27 22:26 last.txt<br />
-rw-r&#8211;r&#8211;   1 root     root       16566 May 27 22:26 test.txt<br />
-r&#8211;r&#8211;r&#8211;   1 root     root      206663 May 27 22:26 words</p>
<p># zfs snapshot <a href="mailto:fox_pool/home@snap1">fox_pool/home@snap1</a><br />
bash-3.00# zfs list<br />
NAME                  USED  AVAIL  REFER  MOUNTPOINT<br />
fox_pool              424K  33.1G  35.3K  /fox_pool<br />
fox_pool/home         316K  33.1G   316K  /fox_pool/home<br />
<a href="mailto:fox_pool/home@snap1">fox_pool/home@snap1</a>      0      -   316K  -</p>
<p># rm words<br />
# ls -al<br />
total 58<br />
drwxr-xr-x   2 root     sys            4 May 27 22:37 .<br />
drwxr-xr-x   3 root     sys            3 May 27 22:25 ..<br />
-rw-r&#8211;r&#8211;   1 root     root        7105 May 27 22:26 last.txt<br />
-rw-r&#8211;r&#8211;   1 root     root       16566 May 27 22:26 test.txt<br />
bash-3.00# zfs snapshot <a href="mailto:fox_pool/home@snap2">fox_pool/home@snap2</a><br />
bash-3.00# zfs list<br />
NAME                  USED  AVAIL  REFER  MOUNTPOINT<br />
fox_pool              467K  33.1G  35.3K  /fox_pool<br />
fox_pool/home         348K  33.1G  57.9K  /fox_pool/home<br />
<a href="mailto:fox_pool/home@snap1">fox_pool/home@snap1</a>   290K      -   316K  -<br />
<a href="mailto:fox_pool/home@snap2">fox_pool/home@snap2</a>      0      -  57.9K  -</p></blockquote>
<p>스냅샷은 /fox_pool/home/.zfs/snapshot/snap1 과, /fox_pool/home/.zfs/snapshot/snap2에 각각 저장되어 있다.</p>
<blockquote><p># pwd<br />
/fox_pool/home/.zfs/snapshot/snap2<br />
# ls<br />
last.txt  test.txt<br />
# cd ../snap2<br />
# ls<br />
last.txt  test.txt</p></blockquote>
<p>snap1로 롤백을 해보았다.</p>
<blockquote><p># zfs rollback <a href="mailto:fox_pool/home@snap1">fox_pool/home@snap1</a><br />
cannot rollback to <a href="mailto:'fox_pool/home@snap1'">&#8216;fox_pool/home@snap1&#8242;</a>: more recent snapshots exist<br />
use &#8216;-r&#8217; to force deletion of the following snapshots:<br />
<a href="mailto:fox_pool/home@snap2">fox_pool/home@snap2</a><br />
# zfs rollback -r <a href="mailto:fox_pool/home@snap1">fox_pool/home@snap1</a><br />
cannot unmount &#8216;/fox_pool/home&#8217;: Device busy<br />
bash-3.00# pwd<br />
/fox_pool/home<br />
# ls<br />
# cd ..<br />
# zfs rollback -r <a href="mailto:fox_pool/home@snap1">fox_pool/home@snap1</a><br />
# cd home<br />
# ls<br />
last.txt  test.txt  words<br />
 </p></blockquote>
<p>이때, 나중에 만든 snap2는 snap1이 만들어지던 시점에는 존재하지않았기때문에, 지워져 버렸다.. <img src='http://blog.boxcorea.com/wp/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  그래서 경고메시지가 나왔었군&#8230;</p>
<p>암튼, 스냅샷은 디스크를 차지하고 있으므로, 필요가 없으면 제거해준다.</p>
<blockquote><p>#zfs  destroy <a href="mailto:fox_pool/home@snap1">fox_pool/home@snap1</a></p></blockquote>
<p>스냅샷이 저장되는 디렉토리 .zfs 는 ls -al로는 확인이 되지 않았지만, 그 이후는 확인이 가능했다. 아울러, 필요한 화일을 직접 복사하는것도 가능했다.</p>
<p>여기까지 사용해본 소감은, 참 편리하다는거. newfs도 필요없고, 마운트도 필요없고. 생성속도 또한 빠르다. disksuit을 사용해야할 이유를 더 이상 찾을 수가 없다.(물론, solaris10이 아니라면 선택의 여지가 없겠지만&#8230;)</p>
<p>마지막으로 참고사이트 : <a href="http://docs.sun.com/app/docs/doc/819-5461?l=en">http://docs.sun.com/app/docs/doc/819-5461?l=en</a>  너무 늦게 발견 ;ㅡㅡ</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.boxcorea.com/wp/archives/129/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

