2013. 12. 13. 13:39

[Linux/Ubuntu 파일 시스템 관리] File system 생성하고 관리하기 (parted로 파티션 크기 변경하기) (02)

sfdisk로 partition 복사하기

sfdisk를 이용하여 partition table을 백업하거나 복사할 수 있다.

  • sudo sfdisk -d /dev/sdb > sdb-part-table
    ; partition table을 파일로 백업한다.
  • sudo sfdisk /dev/sdb < sdb-part-table
    ; partition table 정보 파일을 가지고 복원한다.
  • sudo sfdisk /dev/sdb | sfdisk /dev/sda
    ; partition table 정보를 복사한다.

참고)

sfdisk는 GUID partition table (GPT)를 지원하지 않으며, 대용량의 partition을 위해 설계되지 않았다고 기술되어 있다. 되도록 parted 사용을 권고하고 있다(익숙하지 않다면, gui로 구성된 gparted를 사용할 수 있다).


parted로 disk 파티션(partition) 크기 변경하기

fdisk 이외에도 parted를 이용하여 disk의 partition을 변경할 수 있다. 물론, parted에 좀더 유용한 기능들이 많다.

~$ sudo parted /dev/sdb print

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 42.9GB

Sector size (logical/physical): 512B/512B

Partition Table: msdos


Number  Start   End     Size    Type      File system     Flags

 1      32.3kB  5049MB  5049MB  primary   ntfs

 2      5049MB  42.9GB  37.9GB  extended

 5      5049MB  42.4GB  37.4GB  logical   ext4

 6      42.4GB  42.9GB  535MB   logical   linux-swap(v1)


~$ 


interactive하게 실행하려면 그냥 "parted" 명령만 사용하면 되며, 사용할 device(예, /dev/sda)를 함께 적어줘도 된다.

~$ sudo parted

GNU Parted 2.3

Using /dev/sda

Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted)

좀더 interactive한 사용을 위해 bash shell과 유사하게 Tab 키를 사용할 수 있으며, 명령과 argument를 한번에 전달하거나, 명령만 전달하고 guide를 통해 argument를 입력할 수도 있다.

~$ sudo parted

GNU Parted 2.3

Using /dev/sda

Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) mkpart primary ext3 1MB 10GB                                     

(parted)

...

~$ sudo parted

GNU Parted 2.3

Using /dev/sda

Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) mkpart                                                           

Partition type?  primary/extended? primary                                

File system type?  [ext2]? ext3                                           

Start? 1MB                                                                

End? 10GB                                                                 

(parted)

이렇게 만들어진 partition은 makefs.ext3 명령으로 format할 수 있다. ext3 partition은 다음과 같이 크기 조절할 수 있다.

~$ ls /dev/sd?

/dev/sda  /dev/sdb  /dev/sdc

~$ ls /dev/sda?

ls: cannot access /dev/sda?: No such file or directory

즉, /dev/sda harddisk가 새로 추가됨이 확인된다. 이는 파티션이 현재 없는 것으로 가정하였다.

~$ sudo parted /dev/sda

GNU Parted 2.3

Using /dev/sda

Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) print                                                            

Error: /dev/sda: unrecognised disk label                                  

(parted) mklabel                                                          

New disk label type? msdos

(parted) mkpart

Partition type?  primary/extended? primary                                

File system type?  [ext2]? ext4                                           

Start? 1MB                                                                

End? 2GB                                                                  

(parted)

그래서 위와 같이 parted의 mklabel을 실행한뒤 mkpart로 파티션 하나를 추가하였다.

그리고, 아래와 같이 ext4 filesystem으로 format한다.

~$ sudo mkfs.ext4 /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

122160 inodes, 487936 blocks

24396 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=503316480

15 block groups

32768 blocks per group, 32768 fragments per group

8144 inodes per group

Superblock backups stored on blocks: 

32768, 98304, 163840, 229376, 294912


Writing inode tables: done                            

Creating journal (8192 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 parted /dev/sda print

Model: ATA VMware Virtual I (scsi)

Disk /dev/sda: 3221MB

Sector size (logical/physical): 512B/512B

Partition Table: msdos


Number  Start   End     Size    Type     File system  Flags

 1      1049kB  2000MB  1999MB  primary  ext4

그럼 이제 파티션의 크기를 2.5GB로 늘려보도록 하자.

~$ sudo parted /dev/sda

GNU Parted 2.3

Using /dev/sda

Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) resize                                                           

WARNING: you are attempting to use parted to operate on (resize) a file system.

parted's file system manipulation code is not as robust as what you'll find in

dedicated, file-system-specific packages like e2fsprogs.  We recommend

you use parted only to manipulate partition tables, whenever possible.

Support for performing most operations on most types of file systems

will be removed in an upcoming release.

Partition number? 1                                                       

Start?  [1049kB]?                                                         

End?  [2000MB]? 2500MB

Error: File system has an incompatible feature enabled.  Compatible features are

has_journal, dir_index, filetype, sparse_super and large_file.  Use tune2fs or

debugfs to remove features.

(parted)

위와같이 2.5GB로 크기를 변경하려고 하는데, 해당 file system에는 has_journal, dir_index, filetype, sparse_super 그리고 large_file 속성만 허용되고 그 이외는 허용되지 않는듯 하다.

그래서 아래와 같이 현재 해당 file system의 속성을 살펴보도록 한다.

~$ sudo debugfs /dev/sda1

debugfs 1.41.14 (22-Dec-2010)

debugfs:  features

Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize

debugfs:  q

~$

즉, 해당 file system에는 has_journal, ext_attr, ..., 그리고 extra_isize 속성이 포함되어 있다.

이들중, 허용되지 않은 속성을 아래와 같이 삭제하도록 하자.

~$ sudo debugfs -w /dev/sda1 -R "features ^ext_attr ^resize_inode ^extent ^flex_bg ^huge_file ^uninit_bg ^dir_nlink ^extra_isize"

debugfs 1.41.14 (22-Dec-2010)

Filesystem features: has_journal dir_index filetype sparse_super large_file

~$ 

그럼 위와 같이 현재 남아있는 속성은 parted에서 알려준 허용되는 속성만 포함되어 있어 성공할 것 같지만, 아래와 같이 여전히 실패하게 된다.

~$ sudo parted /dev/sda

GNU Parted 2.3

Using /dev/sda

Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) print                                                            

Model: ATA VMware Virtual I (scsi)

Disk /dev/sda: 3221MB

Sector size (logical/physical): 512B/512B

Partition Table: msdos


Number  Start   End     Size    Type     File system  Flags

 1      1049kB  2000MB  1999MB  primary  ext3


(parted) resize                                                           

WARNING: you are attempting to use parted to operate on (resize) a file system.

parted's file system manipulation code is not as robust as what you'll find in

dedicated, file-system-specific packages like e2fsprogs.  We recommend

you use parted only to manipulate partition tables, whenever possible.

Support for performing most operations on most types of file systems

will be removed in an upcoming release.

Partition number? 1                                                       

Start?  [1049kB]?                                                         

End?  [2000MB]? 2500MB

Warning: The file system has the 'dir_index' feature enabled.  Parted can only

resize the file system if it disables this feature.  You can enable it later by

running 'tune2fs -O dir_index DEVICE' and then 'e2fsck -fD DEVICE'.

Ignore/Cancel? Cancel                                                     

(parted) q                                                                

Warning: You should reinstall your boot loader before rebooting.  Read section 4

of the Parted User documentation for more information.

~$

즉, dir_index 속성도 비활성화 시켜 달라고 한다. 예로 나온 tune2fs대신 debugfs를 사용하여 제거하도록 한다.

~$ sudo debugfs -w /dev/sda1 -R "features ^dir_index"

debugfs 1.41.14 (22-Dec-2010)

Filesystem features: has_journal filetype sparse_super large_file

그럼 다음과 같이 parted를 통해 파티션 크기가 성공적으로 변경된것이 확인된다.

~$ sudo parted /dev/sda

GNU Parted 2.3

Using /dev/sda

Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) print                                                            

Model: ATA VMware Virtual I (scsi)

Disk /dev/sda: 3221MB

Sector size (logical/physical): 512B/512B

Partition Table: msdos


Number  Start   End     Size    Type     File system  Flags

 1      1049kB  2000MB  1999MB  primary  ext3


(parted) resize

WARNING: you are attempting to use parted to operate on (resize) a file system.

parted's file system manipulation code is not as robust as what you'll find in

dedicated, file-system-specific packages like e2fsprogs.  We recommend

you use parted only to manipulate partition tables, whenever possible.

Support for performing most operations on most types of file systems

will be removed in an upcoming release.

Partition number? 1                                                       

Start?  [1049kB]?                                                         

End?  [2000MB]? 2500MB                                                    

Warning: A resize operation on this file system will use EXPERIMENTAL code

that MAY CORRUPT it (although no one has reported any such damage yet).

You should at least backup your data first, and run 'e2fsck -f' afterwards.

OK/Cancel? OK                                                             

(parted) print                                                            

Model: ATA VMware Virtual I (scsi)

Disk /dev/sda: 3221MB

Sector size (logical/physical): 512B/512B

Partition Table: msdos


Number  Start   End     Size    Type     File system  Flags

 1      1049kB  2500MB  2499MB  primary  ext3


(parted)

(참고)

- 파티션의 크기 변경은 parted 대신 GUI가 지원되는 gparted를 사용하고, GUI 환경이 아닌 부득이한 경우에, parted를 이용하도록 한다.

- 파티션의 크기 변경은 EXPERIMENTAL하므로, 중요한 경우, 사전에 백업이 필요할 수 있다.

- tune2fs 보다는 debugfs가 좀더 실행에 문제가 없었다.