재부팅하지 않고 스크립트를 사용하여 명령 줄에서 하드 디스크를 재설정하는 방법 (Mbr 삭제 및 파티션 삭제)?


8

클린 상태에서 시작하려면 명령 줄에서 하드 디스크를 빈 상태로 재설정해야합니다.

지우기 유틸리티를 실행하는 것이 아니라 데이터를 덮어 쓸 필요가 없습니다.

이 질문은 명령 줄에서 모든 파티션 삭제 와 매우 유사합니다

그 해결책은 잘 작동합니다.

dd if=/dev/zero of=/dev/sda bs=512 count=1 conv=notrunc

그러나 덮어 쓴 디스크로 작업하려면 장치가 여전히 사용 중이라는 오류가 발생합니다.

root@grml ~ # blockdev --rereadpt /dev/sda
BLKRRPART: Device or resource busy

또는

root@grml ~ # partprobe
Error: Partition(s) 2, 3 on /dev/sda have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use.  As a result, the old partition(s) will remain in use.  You should reboot now before making further changes.
Error: Partition(s) 2, 3 on /dev/sdb have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use.  As a result, the old partition(s) will remain in use.  You should reboot now before making further changes.

따라서 장치에 "앉아있는"모든 항목을 수동으로 비활성화해야합니다.

umount /mnt/debootstrap
umount /mnt/debootstrap/tmp
umount /mnt/debootstrap/var/log
umount /mnt/debootstrap/var
umount /mnt/debootstrap/home
service mdadm stop
service lvm2 stop
vgremove vg_main
pvremove /dev/md1
mdadm --stop /dev/md0
mdadm --stop /dev/md1
mdadm --remove /dev/md0
mdadm --remove /dev/md1

그 후 partprobe명령이 작동합니다.

더 간단하게 작동하는 명령이 있습니까? 처럼

harddiskreset /dev/sda

파티션 / lvm / md 레이아웃이 다른 시스템에서 쉽게 사용할 수 있습니까?


1
재부팅 이외에 어떤 것이 좋습니다? 여기에 문맥이 무엇입니까?
Michael Hampton

귀하의 질문을 이해하는지 잘 모르겠습니다. setup-storage를 사용하는 bash 스크립트로 데비안 시스템을 부트 스트랩하고 싶습니다. 스크립트가 항상 작동하려면 대상 시스템의 하드 디스크를 비우거나 재설정해야합니다. 그게 당신이 요구 한 상황입니까? 그런 다음 내 질문을 확장합니다. 그것은 단지 하드 디스크에서 mbr 및 파티션을 삭제할 수있는 명령을 찾고 있기 때문에 그것은 나에게 관련이 없어 보였다 ...
c33s

파티션을 설정 하기 전에 MBR을 정리해야 합니다. 여기에 설정 한 후 그렇게하고있는 것 같습니다 !
Michael Hampton

아하! 알았어 (LiveCD에서) 작동하게하려면 먼저 다음을 수행해야합니다. sudo wipefs -a / dev / sdb-fdisk -l은 / dev / sdb에 파티션 테이블을 표시하지 않았습니다-그런 다음-sudo dd if = / dev / sda of = / dev / sdb는 기본 드라이브의 부팅 가능한 복사본을 만들려고 노력했습니다.
SDsolar

답변:


5

wipefs프로그램을 사용하면 파티션 테이블 서명을 쉽게 삭제할 수 있습니다.

wipefs -a /dev/sda

그래도 LVM과 같은 장치를 사용하는 프로세스는 중지해야합니다.

에서 man wipefs

wipefs는 지정된 장치에서 파일 시스템, RAID 또는 파티션 테이블 서명 (매직 문자열)을 지워서 libblkid에 서명을 보이지 않게 할 수 있습니다.

wipefs는 파일 시스템 자체 나 장치의 다른 데이터를 지우지 않습니다. 옵션없이 사용하면 wipefs는 보이는 모든 파일 시스템과 기본 서명의 오프셋을 나열합니다.

wipefs는 파티션 테이블 서명을 지울 때 BLKRRPART ioctl을 호출하여 변경 사항을 커널에 알립니다.


2

나는 항상 이것을 위해 parted를 사용했다. 디스크 레이블 유형을 변경하고 파티션을 추가 / 제거하는 데 특히 효과적입니다. 특히 fdisk와 달리 최신 대형 HDD를 처리 할 수 ​​있기 때문입니다.

당신은 실행할 수 있습니다

$ sudo parted /dev/sda

이것은 일을 시작하고 당신을 parted 터미널로 데려다 줄 것입니다. 그런 다음 help 명령을 실행하여 사용 가능한 모든 명령을 표시 할 수 있습니다. 매우 설명이 필요합니다.

예, 포맷하려는 디스크의 모든 파티션을 마운트 해제해야합니다. 모든 파티션을 마운트 해제하는 더 빠른 방법을 찾고 있다면 umount 명령에서 정규식으로 할 수는 있지만 어리석은 것처럼 보입니다.

parted를 사용하여 HDD를 관리하면서 디스크를 새로 고칠 필요가 없었습니다.

새로운 용도로 드라이브를 완전히 새로 고치려면 일반적으로 다음을 수행하십시오.

1) 달리기로 시작 sudo parted /dev/sda

2) 실행하여 기존 파티션을 찾으십시오. print

3) rm 11을 제거하려는 파티션 번호로 대체하여 기존 파티션 을 제거하십시오. 그런 다음 디스크에 남아있는 모든 파티션에 대해 반복하십시오.

4) mklabel gptgpt 레이블 유형을 사용 하여 디스크 레이블을 재설정 하지만 표준 msdos 또는 원하는대로 사용할 수 있습니다. 다음은 디스크 레이블 유형 목록입니다

5) 다음을 실행하여 새 파티션을 mkpart작성하십시오. 그러면 파티션 작성 마법사가 실행됩니다. 시작점과 끝점은 기본적으로 섹터입니다. 실행 unit하기 전에 명령 을 실행하여이를 변경할 수 있습니다. mkpart이렇게하면 GB 또는 TB 또는 MB 등으로 지정할 수 있습니다.

6) print새 파티션 테이블 정보를 보는 데 사용하여 결과 확인

7) 그런 다음 파티션을 포맷해야합니다. 일부 옵션을 사용할 수 있지만이 작업은 parted를 통해 수행하면 안됩니다. 대신 quit분할 된 터미널을 종료 mkfs하고 파티션을 포맷하는 데 사용 하는 것이 좋습니다 . 디스크 전체가 아닌 파티션을 포맷하기 때문에 / dev / sda 대신 / dev / sda1에서 'mkfs'를 실행해야합니다.

그게 다야.

이것이 귀하의 질문에 답변되기를 바랍니다.

또한 다음은 참조 용 온라인 부분 매뉴얼입니다 : https://www.gnu.org/software/parted/manual/html_node/index.html

편집하다:

OP는 터미널이 아닌 스크립트에서 이런 종류의 작업을 수행하려고했습니다. parted 터미널 내에서 단일 행 명령을 통해 parted를 실행하여 스크립트를 통해 동일한 종류의 절차를 수행 할 수 있습니다.

예를 들어

$ sudo parted /dev/sda print

드라이브 정보와 파티션 테이블을 bash 콘솔에 출력 한 다음 grep etc를 사용하여 변수 나 bash 스크립트에서 원하는 것을 생성 할 수 있습니다.


터미널에서
수동이

원본 게시물에 스크립트가 언급되지 않은 상태로 기다립니다. 이 중 어떤 부분을 스크립팅하고 있습니까? parted 터미널에 가지 않고도 parted 명령을 실행할 수 있다고 생각합니다. 그래도 확실하지 않습니다.
KroniK907

확인하기 위해 한 줄 명령에서 parted를 실행할 수 있습니다. 예를 들어 parted /dev/sda print/ dev / sda에 대한 파티션 테이블을 인쇄합니다. bash 스크립트 내에서 수행 해야하는 경우 한 줄 명령으로 위에서 설명한 것과 동일한 작업을 수행 할 수 있습니다.
KroniK907

그러나 명령을 사용하려면 장치의 이름이 무엇인지 알아야합니다. parted /dev/sda또한 드라이브에 몇 개의 파티션이 있는지 알아야합니다 rm 1. 디스크를 간단히 정리하는 명령을 찾고 있으므로 다시 파티션 할 수 있습니다. md를 종료하는 모든 수동 작업을 수행하지 않고 lv를 제거하는 등.
c33s

1) 여전히 dd 명령을 실행하기 위해 장치 이름이 무엇인지 알아야합니다. df드라이브가 장착되어 있으면 그냥 통과 하십시오. 드라이브의 위치를 ​​찾을 수없는 경우 어떻게 "스크립트"를 만들 계획입니까? 2) parted $drive print사용 가능한 모든 파티션 번호를 찾은 다음 배열에 저장하기 위해 결과 를 실행 하고 grep 하기가 쉽습니다 . 그런 다음 해당 값을 사용하여 실행하십시오 parted $drive rm $partition. 이 모든 것은 매우 간단한 bash 스크립팅입니다.
KroniK907

0

sfdisk 인 향상된 비 대화식 fdisk 버전을 사용하십시오.

파티션 테이블을 지우려면 다음 명령을 사용하십시오.

sfdisk --delete /dev/sda

0

기본적으로이 오류

오류 : / dev / sdc의 파티션 1이 작성되었지만 사용 중이므로 변경 사항을 커널에 알릴 수 없습니다. 결과적으로 이전 파티션은 계속 사용됩니다. 추가로 변경하기 전에 지금 재부팅해야합니다.

디스크를 파티션하는 동안 일부 매개 변수를 놓치면이 나타납니다. 파티셔닝 중에 정의한 매개 변수를 자세히 보면이 오류를 해결할 수 있습니다.

사용 : fdisk -l디스크의 매개 변수를 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.