파일 시스템 서명 53 ef뿐만 아니라 모든 ext4 메타데이터를 지우는 방법은 무엇입니까?

파일 시스템 서명 53 ef뿐만 아니라 모든 ext4 메타데이터를 지우는 방법은 무엇입니까?

ext4 파일 시스템 구조뿐만 아니라 ext4 파일 시스템 구조가 존재하는 파티션의 모든 비트(슈퍼블록, 메타데이터, 로그 등)를 0으로 만들고 싶습니다 wipefs.

유틸리티를 사용하면 파일 내용을 신속하게 지울 수 있지만 shred메타데이터는 그렇지 않습니다. 지원되는 블록 장치에서는 전체 파티션에서 빠르게 실행할 TRIM/DISCARD수 있으므로 쉽습니다 .blkdiscard

그러나 사용할 수 없는 대형 회전 HDD에서 TRIM/DISCARD모든 비트를 0으로 설정하는 것은 시간이 많이 걸리는 프로세스가 되거나 디스크 암호화 키(자체 암호화 드라이브에서)를 파괴/재생성하는 것을 의미하며 이는 ext4 파티션뿐만 아니라 전체 드라이브를 잃는 것을 의미합니다.

mke2fs코드를 읽고 이를 기반으로 가상의 도구를 만드는 것 외에 wipe2fs모든 ext4 슈퍼블록/메타데이터를 빠르게 지울 수 있는 또 다른 방법이 있습니까?

답변1

나는 몇 년 전에 후속 mkfs가 무인 설치 중에 "정말로 이 작업을 하시겠습니까..."라는 질문을 묻지 않도록 모든 슈퍼블록을 제거하기 위한 스크립트 원격 설치의 일부로 이 기사를 썼습니다. 테스트는 2개의 파티션이 있는 단일 장치로 제한됩니다.

# Overwrite any existing superblocks for the filesystem on each partition
#
# Zero out the superblock where the filesystems will be. If we don't do this,
# when we reimage a disk mkfs will see the superblocks of the filesystem which
# may have previously been here and and ask for a y/n confirmation before
# proceeding which requires more manual intervention (see disk geometry below)
# This gets a little complicated since the mkfs scatters superblocks across the
# partition to protect against failure so you just can't just zero out the
# beginning of the partition.
# Note that fdisk reports in units of 512 byte blocks (-u) ($FD_BS) but
# the file system may have different blocksize ($FS_BS). When we dd seek to zero
# out the superblock, we need to seek X file system blocks (in FS_BS) from
# the beginning of the partition (in FD_BS) so we use the FS_MULT to help make
# the math more obvious.

overwriteAnySuperblocks() {

fdisk -u -l ${TGTDEV} | grep -v EFI |
        sed -n '/^\//{ s/\*/ /; p}' | # only line that start with /, delete '*'
    while read PART FIRST_BLOCK IGNORE_REST_OF_LINE
    do
        FD_BS=512   # fdisk reports in 512 byte blocks
        echo "Partition $PART starts at $FIRST_BLOCK fdisk blocks" >&2
        # get the file system block size - may be a 4k file system
        FS_BS=$(dumpe2fs "${PART}" 2>/dev/null |
                sed -n '/^Block size/s/^Block size: *\([0-9]*$\)/\1/p')
        echo "File system block size from dumpe2fs - FS_BS=$FS_BS" >&2
        [[ -z "${FS_BS}" ]] && continue # no filesystem on this partition
        # file system block as a multiple of 512 byte blocks
        FS_MULT=$(( FS_BS / FD_BS ))
        echo "File system block size $FS_BS is $FS_MULT x $FD_BS fdisk blocks" >&2
        # zero out the beginning of each partition
        # zero out backup superblocks
        dumpe2fs "${PART}" 2>/dev/null |
            sed -n '/superblock/s/^.*block at \([0-9]*\).*/\1/p' |
            while read SUPERBLOCK
            do
                echo "Zeroing superblock at FS $SUPERBLOCK" >&2
                #echo dd if=/dev/zero of=${TGTDEV} bs=${FD_BS} \
                #    seek=$((${FIRST_BLOCK}+(${SUPERBLOCK}*${FS_MULT}))) \
                #    count=2048
                dd if=/dev/zero of=${TGTDEV} bs=${FD_BS} \
                    seek=$(( FIRST_BLOCK + (SUPERBLOCK*FS_MULT) )) \
                    count=2048
            done
    done

}

답변2

우리는 단순히 파티션의 첫 번째 블록에 0을 추가하곤 했습니다.

dd if=/dev/zero bs=512 count=512 of=/dev/your_partition

관련 정보