2013. 12. 13. 17:44

[Linux/Ubuntu 파일 시스템 관리] File system 포맷(format)하기

disk partition이 있다면 partition 별로 file system을 선택해야 한다. mkfs로 format을, fsck로 check를 할 수 있다. mkfs 명령은 mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.cramfs, ... 와 같은 형태로 제공한다. 즉, . 뒤의 부분이 사용될 file system이다. 이는 다음과 같이 확인 가능하다.

~$ ls /sbin/mkfs.*

/sbin/mkfs.bfs     /sbin/mkfs.ext3     /sbin/mkfs.minix  /sbin/mkfs.vfat

/sbin/mkfs.cramfs  /sbin/mkfs.ext4     /sbin/mkfs.msdos

/sbin/mkfs.ext2    /sbin/mkfs.ext4dev  /sbin/mkfs.ntfs


Hard disk partition에 file system 생성하기


file system 생성과 체크에 사용될 software package가 필요하다. ext인 경우 e2fsprogs, ntfs는 ntfsprogs, msdos와 vfat은 dosfstools, xfs는 xfsprogs, jfs는 jfsutils, 그리고 reiserfs는 reiserfs-utils가 설치되어야 한다. 이러한 것들은 ubuntu에 기본적으로 포함되어 있다. format에는 mkfs가 check에는 fsck가 각각 사용된다.


다음은 file sytem을 생성하는 예이다.

~$ sudo mkfs -t ext3 /dev/sda1

[sudo] password for greenfish: 

mke2fs 1.41.14 (22-Dec-2010)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

2621440 inodes, 10483298 blocks

524164 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=0

320 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks: 

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 

4096000, 7962624


Writing inode tables: done                            

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done


This filesystem will be automatically checked every 29 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

~$ 

~$ sudo mkfs -t ext3 -v -c /dev/sda1

mke2fs 1.41.14 (22-Dec-2010)

fs_types for mke2fs.conf resolution: 'ext3'

Calling BLKDISCARD from 0 to 42939588608 failed.

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

2621440 inodes, 10483298 blocks

524164 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=0

320 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks: 

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 

4096000, 7962624


Running command: badblocks -b 4096 -X -s /dev/sda1 10483297

Checking for bad blocks (read-only test): done                                

Writing inode tables: done                            

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done


This filesystem will be automatically checked every 24 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

~$ 

~$ sudo mkfs.ext3 -c /dev/sda1

mke2fs 1.41.14 (22-Dec-2010)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

2621440 inodes, 10483298 blocks

524164 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=0

320 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks: 

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 

4096000, 7962624


Checking for bad blocks (read-only test): done                                

Writing inode tables: done                            

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done


This filesystem will be automatically checked every 33 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

~$ 

~$ sudo mkfs.ext3 -c -L label_name_ext3 /dev/sda1

mke2fs 1.41.14 (22-Dec-2010)

Filesystem label=label_name_ext3

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

2621440 inodes, 10483298 blocks

524164 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=0

320 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks: 

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 

4096000, 7962624


Checking for bad blocks (read-only test): done                                

Writing inode tables: done                            

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done


This filesystem will be automatically checked every 39 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

~$ 


  • sudo mkfs -t ext3 /dev/sda1
    ; sda1에 ext3 file system으로 format 한다.
  • sudo mkfs -t ext3 -v -c /dev/sda1
    ; sda1에 ext3 file system으로 format 한다. bad block을 검사하고, 더 많은 정보를 보여준다.
  • sudo mkfs.ext3 -c /dev/sda1
    ; 앞선 명령과 동일하다.
  • sudo mkfs.ext3 -c -L label_name_ext3 /dev/sda1
    ; sda1에 ext3 file system으로 format 한다. 해당 파티션 label 이름을 설정한다.

virtual file system 만들기


물리적 disk로 구성되지 않은, 보다 휴대성(portable)이 높은 file system이 필요한 경우엔, virtual file system을 고려할 수 있다. 그 특징으로 virtual file system은 임의의 file system(예, ext2, ntfs, fat, ...)내의 file로 구성된다는 점이다. 해당 file을 가지고 특정 file system으로 format하고 사용한뒤, 그 file을 다른 컴퓨터에서 사용할 수 있게 한다.

이러한 virtual file system은 다음과 같이 생성할 수 있다.

~$ dd if=/dev/zero of=vfs.bin count=2048000

2048000+0 records in

2048000+0 records out

1048576000 bytes (1.0 GB) copied, 25.362 s, 41.3 MB/s

~$

즉, 0x00으로 채워진 1GB의 파일(vfs.bin)을 생성하였다.

그 용량은 아래를 참조한다.

~$ ls -la vfs.bin

-rw-r--r-- 1 greenfish greenfish 1048576000 2013-12-13 15:55 vfs.bin

~$ du -sh vfs.bin

1001M vfs.bin

~$

그럼, 해당 파일을 virtual file system으로 사용하기 위해 ext3 형식으로 아래와 같이 format 할 수 있다.

~$ mkfs.ext3 vfs.bin

mke2fs 1.41.14 (22-Dec-2010)

vfs.bin is not a block special device.

Proceed anyway? (y,n) y

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

64000 inodes, 256000 blocks

12800 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=264241152

8 block groups

32768 blocks per group, 32768 fragments per group

8000 inodes per group

Superblock backups stored on blocks: 

32768, 98304, 163840, 229376


Writing inode tables: done                            

Creating journal (4096 blocks): done

Writing superblocks and filesystem accounting information: done


This filesystem will be automatically checked every 38 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

~$

위 mkfs.ext3을 호출하는데 sudo가 필요없음을 주목하기 바란다.

vfs.bin 파일은 1GB이며 해당 파일은 1GB의 파티션처럼 인식되어 ext3으로 포맷되었다.

이제 해당 virtual file system을 mount해 보자.

~$ sudo mkdir /mnt/001_vfs

[sudo] password for greenfish: 

~$ sudo mount -o loop vfs.bin /mnt/001_vfs

~$ ls /mnt/001_vfs/

lost+found

~$

mount -o loop 명령을 이용하여 물리적 disk로 구성된 파티션이 아닌 임의의 파일을 가지고 mount하였다.

그럼, /mnt/001_vfs/는 이제 ~/vfs.bin 파일과 연결되는 것이다. 그리고, /mnt/001_vfs/foo.bar 와 같이 파일을 생성하고 사용할 수 있다.

~$ sudo umount /mnt/001_vfs

~$

와 같이 mount를 해제하면 vfs.bin을 사용할 수 있으며, 해당 파일을 다른 컴퓨터에서 복사하여 전달한뒤, 동일하게 mount하고 사용할 수 있다.