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

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

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

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

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

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 레이아웃이 다른 시스템에서 쉽게 사용할 수 있습니까?



답변

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

wipefs -a /dev/sda

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

에서 man wipefs

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

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

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


답변

나는 항상 이것을 위해 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 스크립트에서 원하는 것을 생성 할 수 있습니다.


답변

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

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

sfdisk --delete /dev/sda

답변

기본적으로이 오류

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

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

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