파티션 수를 sda1에서 sda2로 변경하십시오.


20

sda1과 sda2라는 두 개의 파티션이있는 디스크가 있습니다. sda1의 수를 sda2로 변경하고 sda2를 sda1로 변경하고 싶습니다.

가능하지만 절차가 기억 나지 않습니다. 즉, 첫 번째 파티션은 sda2이고 두 번째 sda1이므로 fdisk-> x-> f와 같은 자동 순서가 아닌 수동 순서를 지정해야합니다.

주문은 어떻게 변경합니까? 매뉴얼이나 튜토리얼에 대한 링크도 유용합니다.

감사.

이유 : sda1에서 데이터를 읽어야하는 응용 프로그램이 있지만 데이터는 sda2에 있습니다. 파티션 테이블을 바꾸는 것이이 문제에 대한 가장 빠른 해결책입니다. 시스템은 중요하지 않지만 너무 오랜 시간 동안 시스템을 중지하고 싶지 않습니다.

업데이트 : OpenBSD의 fdisk 버전에는 그 기능이 포함되어 있습니다.


1
요청한 것을하는 것은 일반적으로 나쁜 생각이므로 원하는 이유 를 설명하십시오 .
rozcietrzewiacz

나는 백업을 가지고있다, 걱정하지 마라 :)
Rufo El Magufo

좋아, 당신은 경고하고 놀고 싶어, 그래서 여기에 간다 ... :)
rozcietrzewiacz

답변:


17

참고로, 그것은 나쁜 생각 이며 모든 것을 잃을 수 있습니다. 그래도 원하는 경우 다음 단계를 수행하십시오.

  1. 해. 이것이 도움이되지 않으면 :
  2. sfdisk도구 사용 : 먼저 다음을 사용하여 파티션 테이블을 백업하십시오.

    sfdisk -d /dev/sda > sda.out
    

    그런 다음 가십시오.

    sfdisk /dev/sda -O sda-partition-sectors.save
    

    당신은 이와 같은 것을 보게 될 것입니다

    Checking that no-one is using this disk right now ...
    OK
    
    Disk /dev/sda: 1018 cylinders, 124 heads, 62 sectors/track
    Old situation:
    Units = cylinders of 3936256 bytes, blocks of 1024 bytes, counting from 0
    
       Device Boot Start     End   #cyls    #blocks   Id  System
    /dev/sda1          0+      5       6-     23063+  83  Linux
    /dev/sda2          6    1017    1012    3890128   83  Linux
    /dev/sda3          0       -       0          0    0  Empty
    /dev/sda4          0       -       0          0    0  Empty
    Input in the following format; absent fields get a default value.
    <start> <size> <type [E,S,L,X,hex]> <bootable [-,*]> <c,h,s> <c,h,s>
    Usually you only need to specify <start> and <size> (and perhaps <type>).
    
    /dev/sda1 :
    

이제 'sda1'파티션에 대한 새로운 세부 정보를 제공하라는 메시지가 표시됩니다. 따라서 여기에 sda2의 수를 제공해야합니다. 여기에 '6 1012'를 입력하고 Enter 키를 누릅니다.

    /dev/sda1 :6 1012
    /dev/sda1          6    1017    1012    3890128   83  Linux
    /dev/sda2 :

이제 확인 Enter를 누른 후 인쇄 된 숫자가있는 경우 바로 이전 sda2와 대한 인쇄와 동일. 괜찮다면 sda2에 새 번호를 계속 제공하십시오.

    /dev/sda2 :0
    /dev/sda2          0+      5       6-     23063+  83  Linux
    /dev/sda3 :

이번에는 제 경우에는 "0"을 입력하기에 충분했지만 숫자가 잘못 입력되지 않았는지 확인해야합니다.

다음으로 같은 방식으로 다른 파티션을 계속 진행하십시오. 이미 디스크의 끝에 도달 한 경우 Enter를 누르면 충분합니다. 마지막으로 모든 숫자가 올바른지 다시 확인하고 파티션 테이블을 저장하십시오. 무언가를 엉망으로 만들면 man sfdisk'-d', '-O'및 '-I'옵션에 대한 설명을 살펴보십시오 .

또한 미친 변경을 한 후에는 마운트를 시도하기 전에 파티션을 다시 읽도록 'sync'를 실행해야 할 수도 있습니다.


답변 해주셔서 감사합니다. 당신이 옳습니다, 이것은 무섭습니다 :).
Rufo El Magufo

놀랍도록 악하다. 숫자가 동일하지 않으면 어떻게됩니까? 포기하고 다시 파티션 하시겠습니까? (내가 한 일)
supervacuo

1
@supervacuo Testisk 가 도움이 될 것입니다. testdisk배포판의 소프트웨어 데이터베이스에서 패키지를 검색 하십시오.
rozcietrzewiacz

@supervacuo 숫자가 동일하지 않으면 새 파티션이 이전 파티션과 같은 위치에 있지 않아 잠재적으로 손상 될 수 있습니다. 디스크에 다른 작업을 수행하지 않으면 시작하기 전에 백업 한 파티션 테이블을 복원 한 후 다시 시도 할 수 있습니다. 그렇지 않다면 올바른 숫자가 콘솔 어딘가에 있거나 파티션의 정확한 크기와 위치를 기억하고 숫자를 계산할 수 있기를 바랍니다.
Micheal Johnson

31

방금 더 쉬운 방법 으로이 작업을 수행했습니다.

# sfdisk -d /dev/sdb > sdb.bkp

안전을 위해 사본을 남겨주세요

# cp sdb.bkp sdb.new 

이제 내 경우와 같이 줄 순서와 파티션 번호 만 변경하여 sdb.new를 편집하십시오.

...에서

# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=  1026048, size=975747120, Id=83
/dev/sdb2 : start=     2048, size=   204800, Id=83
/dev/sdb3 : start=   206848, size=   819200, Id= b
/dev/sdb4 : start=        0, size=        0, Id= 0

# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=     2048, size=   204800, Id=83
/dev/sdb2 : start=   206848, size=   819200, Id= b
/dev/sdb3 : start=  1026048, size=975747120, Id=83
/dev/sdb4 : start=        0, size=        0, Id= 0

그런 다음 디스크 파티션 테이블로 다시 던져?

# sfdisk /dev/sdb < sdb.new

을 사용하여 디스크 시작 부분에 두 개의 작은 파티션을 추가하기 위해 유일한 파티션 (sdb1)을 바로 축소하고 이동 한 후 번호 매기기 시퀀스가 ​​손상되었습니다 gparted.

필자의 경우처럼 마지막 명령이 작동하지 않으면 다음과 같이 변경하십시오.

# sfdisk --no-reread -f /dev/sdb < sdb.new

이것은 나를 위해 일했고 나는 그 두 번째 명령이 필요하지 않았습니다.
Aaron Franke

나에게도 감사합니다;) ... 참고 모든 파티션이 명령 전에 마운트 해제되었는지 확인하십시오
intika

3

순서를 반대로하려면 드라이브 파티션 테이블을 다시 작성해야하므로 약간 위험합니다. 내가 당신이라면 장치 이름의 순서를 바꾸고 파티션을 그대로 두는 문제를 해결하려고합니다.

예를 들어 두 컴퓨터에서 실행해야하는 스크립트가 있고 동일한 장치에 액세스하려는 경우 두 서버 모두에서 동일한 이름 인 / dev가 아닌 다른 디렉토리에 링크를 작성하지만 / 하나는 dev / sda1, 다른 하나는 / dev / sda2입니다.

파티션 편집기 ( fdisk또는 cfdisk)를 사용하여 파티션 을 편집 할 수 있지만 현재 설정을 기록하거나 화면 사진을 찍어야합니다. 두 개의 파티션을 삭제 한 다음 올바른 값을 모두 지정하여 수동으로 생성하십시오. 이를 위해 LiveCD로 시스템을 부팅하십시오.


나는 아무것도 바꿀 수 없다. 내 시스템은 Xen DomU이며 문제는 Dom0에 있습니다. 파티션 순서를 다시 만들 수 있지만 상황에 따라 더 복잡합니다. 어쨌든 순서가 어떻게 바뀌는 지 알고 싶습니다.
Rufo El Magufo

2

우선,이 모든 것은 최선을 다해 문제를 해결하기위한 연습이지만, 어쨌든 시도 할 수있는 또 다른 방법이 있습니다.

참고 : 부팅 위치에 대해서는 언급하지 않았으며이 솔루션을 작성할 당시 다른 솔루션은 LILO 또는 GRUB이 제대로 작동하기 위해 수행해야 할 작업을 다루고 있지 않습니다.

/dev/sda1/dev/sda2블록 디바이스 (8,1) 및 (8,2)이있다. 당신은 mknod단순히 둘을 바꾸는 데 사용할 수 있습니다 .

telinit 1
(...)
rm -f /dev/sda{1,2}; mknod /dev/sda1 b 8 2; mknod /dev/sda2 b 8 1
chmod 640 /dev/sda{1,2}; chown root:disk /dev/sda{1,2}
reboot

그냥이 스와핑이 파티션이 함유 된 후에 만 일어날 것 기억 /dev/(가) 그래서, 부팅시로드 initrd- 당신이 너무 거기 (것 독자들에게 운동을 수정하지 않는 한 여전히 "올바른"사람이있을 것이다 mkinitrd기묘 복사를?) 이도하지 않습니다 SELinux 컨텍스트를 다룹니다.


부트 로더에는 문제가 없습니다 :). 솔루션에 감사하지만 시스템이 아닌 파티션 테이블의 순서를 변경해야합니다.
Rufo El Magufo

1
udev를 사용하는 시스템에서는 작동하지 않으며 응용 프로그램이 /dev/sda(디스크를 직접 읽는 것과는 대조적으로) 라는 파일에서 응용 프로그램을 읽는 경우에만 도움이됩니다 .
Gilles 'SO- 악마 그만해'

둘 다-동의했다. IMHO의 전체 질문은 고통의 운동입니다. 나는 udev물건 에 대해 확신하지 못했습니다 . 내가 ssh찾은 첫 번째 시스템에는 분명히 없었습니다.
Aaron D. Marasco

2

방금이 문제에 대한 놀랍도록 쉬운 해결책을 발견했습니다. 이름이라는 파티션이 하나만 있다고 가정합니다 /dev/sda3. 당신은 그것을 호출하기를 원합니다 /dev/sda1. 를 열고 gdisk파티션 테이블을 GPT로 변환 한 후 쓰기 및 종료하십시오. 그런 다음 다시 열고 sort (GPT 번호가 1로 변경됨)를 누른 다음 전문가 옵션을 통해 GPT를 MBR로 다시 변환하십시오.


1

터미널에서 루트로 / dev / sda3에서 / dev / sda2로 파티션 편집-

  1. 백업 파티션 테이블

    sfdisk -d / dev / sda> sda.bkp

  2. 파티션 테이블 백업을 새 파티션 테이블로 복사

    cp sda.bkp sda.new

  3. 새 파티션 테이블 편집

    gedit sda.new

여기에 이미지 설명을 입력하십시오

저장 후 닫기

  1. 새 파티션 테이블을 다시 설치하십시오.

    sfdisk --no-reread -f / dev / sda <sda.new

  2. 컴퓨터 재부팅


이것이 가능하지만 GParted LiveCD를
eyoung100

1
모노 스페이스가 아닌 글꼴, 보이는 삽입 지점 및 맞춤법 검사기 오류가있는 텍스트 편집기의 스크린 샷보다 더 나은 방법이 있다고 생각합니다.
Micheal Johnson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.