partprobe는 어떻게 작동합니까?


12

내 커널 (CentOS 5.5의 2.6.18-194-el5)이 드라이브의 파티션에 대해 알 수있는 scsi 버스 (또는 그 문제에 대한 다른 버스)를 새로 고칠 수있는 방법을 찾고 있었고 방법을 찾지 못했습니다. partprobe가 즉시 해냈습니다. 어떻게?

중요하기 때문에 여기에 내가 한 일이 있습니다.

크기 조정, MBR 백업 및 복원 등과 같은 파티션 별 작업에 대한 실습을 원했습니다. / dev / sdb에 20GB 파티션을 생성하고 MBR을 백업했습니다.

dd if = / dev / sdb of = sdb.mbr bs = 512 count = 1

그런 다음 fdisk로 이동하여 파티션을 삭제하고 작성하고 종료했습니다.

ls / dev / sdb *

파티션이 없다는 것을 보여주었습니다.

fdisk -l / dev / sdb '

일치, 그래서 내가 좋았다고 생각했다.

그런 다음 dd를 뒤집 었습니다.

dd if = sdb.mbr of = / dev / sdb bs = 512 count = 1

물론 나는 그 시점에서 아무 것도하지 않았다.

ls / dev / sdb *

파티션을 나열하지 않았지만

fdisk -l

디스크에서 처음 512 바이트를 읽고 커널에 의존하지 않기 때문에 아마도 파티션을 보여주었습니다. 버스를 새로 고쳐야한다는 것을 알았으므로 / sys / class / scsi_host / host1에 들어가서

에코 "---"> 스캔

하고

ls / dev / sdb

새로운 것을 보여주지 않아서 / sys / bus / scsi / devices에 갔고 나열된 각 장치에 대해

에코 1> 재검색

그리고 그것은 작동하지 않았다.

나는 그 문제에 대해 더 많은 연구를했고, 'partprobe'를 발견했다. 나는 그것을 실행했고 즉시 작동했습니다.

여기서 대답을 얻지 못하면 아마도 소스를 가져 와서 찾을 것입니다. 그러나 저를 넘어 마법사가 있다고 생각합니다.

답변:


12

Partprobe는 BLKRRPARTioctl을 호출하는데 ,이 include/linux/fs.h커널은 커널 소스 (고기는에 있음 rescan_partitions())를 넘어서서 문서화되어 있습니다 .

#define BLKRRPART  _IO(0x12,95) /* re-read partition table */

이것을 찾는 가장 쉬운 방법은 실행하는 것 strace -e raw=ioctl -e open,ioctl partprobe /dev/sdb입니다.

나는 당신이 시도한 /sys/*/*scan것이 커널에 드라이브 변경이 있는지 확인하도록 지시 한다고 생각합니다 . 드라이브가 변경되지 않았거나 (커널이 감지하지 못하는 방식으로 핫스왑 된 경우) 도움이되지 않지만 파티션 구조가 변경되었습니다.

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