'XFS'에 해당되는 글 2건

  1. 2012.01.02 XFS realtime sub-volume에 write하기
  2. 2011.08.22 XFS mount fail on MIPS32

XFS는 SGI에서 개발한 저널링 파일 시스템이다.  자세한 XFS 자랑거리(?)는 http://oss.sgi.com/projects/xfs 에서 참조할 수 있다.  (항상 그렇지만 나는 홈페이지들이 내세우는 자랑거리를 100% 믿지 않는다 ㅋㅋ)

어쨌든, 여기서 XFS의 방대한 기능과 동작원리에 대해서 논할 것은 아니고 (모르기 때문... -_-) XFS의 특이기능(?)이라고 할만한 realtime sub-volume을 사용하는 방법에 대해 알게된 내용을 잊어먹기 전에 적어 놓는 것 뿐이다..

XFS의 realtime sub-volume은 앞서 걸어놓은 링크에서도 확인되지만, 오직 data를 저장하기 위한 분리된 공간이며 realtime sub-volume의 공간은 realtime allocator에 의해 B+ tree 방식에 의해 관리된다.  그리고, realtime sub-volume은 media streaming application에 적합하다고 한다 (왜 -_-?).

어쨌거나, 이러한 XFS의 realtime sub-volume에 standard I/O로는 write가 되지 않고, 특별한 방법(?)을 거쳐야 한다.  이에 대한 내용은 http://oss.sgi.com/projects/xfs/papers/getting_started_with_xfs.pdf 에서도 찾아볼 수 있고, xfsprogs (XFS를 지원하기 위한 userspace application들의 모임에 대한 총칭?)의 source code에서도 찾아볼 수 있다.  여기서는 코드를 먼저 보고 소스를 보는 쪽으로 하겠다.  (문서보다는 코드가 좋다... -_-)

xfsprogs에는 xfs_io라는 application이 있는데, 이 application을 사용하면 realtime sub-volume에 write가 가능하다.

# xfs_io -fR /var/testfile -c 'pwrite -b 1m 0 16g'

위의 명령으로는 block size가 1M인 16GB짜리 file을 offset 0을 시작점으로 하여 생성하는 것이다.  -f는 생성, -R은 realtime을 사용하는 것을 의미, -c 이후는 command line이다.  만약 XFS partition을 생성할 때 realtime sub-volume을 지정해주지 않았다면, 이 명령은 당연히 실패할 것이다.  이 명령을 기준으로 xfsprogs의 source code를 훑어내다보면 xfsprogs/io/에서 (v3.1.4 기준) 힌트를 찾을 수 있다.

init.c에서 


case 'R':
flags |= IO_REALTIME;


를 찾아낼 수 있고, IO_REALTIME을 사용하는 open.c에서 다음과 같은 코드를 찾을 수 있다.


if (!(flags & IO_READONLY) && (flags & IO_REALTIME)) {
      struct fsxattr attr;  

      if (xfsctl(path, fd, XFS_IOC_FSGETXATTR, &attr) < 0) {
          perror("XFS_IOC_FSGETXATTR");
          close(fd);
          return -1;
      }  
      if (!(attr.fsx_xflags & XFS_XFLAG_REALTIME)) {
          attr.fsx_xflags |= XFS_XFLAG_REALTIME;
          if (xfsctl(path, fd, XFS_IOC_FSSETXATTR, &attr) < 0) {

              perror("XFS_IOC_FSSETXATTR");
              close(fd);
              return -1;
          }
    }  
}


결국 핵심은 bold 처리된 부분이다.  xfsctl(3)을 사용하지 않으면 realtime sub-volume에 write할 수 없는 것이다. 문서에서도 동일한 내용을 찾아볼 수 있다.

XFS의 구조에 대해 분석을 해봐야겠다는 욕구가 생긴다... 한번 해볼까.. 

Posted by 강군님

댓글을 달아 주세요

XFS mount fail on MIPS32

Linux 2011. 8. 22. 11:20

아오.. 이거땜에 삽질을 얼마나 한겨... -_-;; MIPS가 진정 임베디드 세계에서 왕따가 되는 것인가.. -_-;

Posted by 강군님

댓글을 달아 주세요