SD 카드 재 포맷


0

SD 카드를 공장 출하 상태로 다시 포맷해야합니다.

미디어에 사용 된 SD 카드 파일 시스템이 손상되었습니다. 특정 디렉토리에 액세스하면 파일 시스템이 읽기 전용으로 다시 마운트되어 삭제할 수 없습니다. fsck.vfat는 특정 유형의 손상에 대한 복구 방법이 없다고 말합니다.


sudo dd if=/dev/zero of=/dev/whatever bs=2048 count=1깨끗하게 닦기에 충분해야합니다. 내부 디스크에 그렇게하지 않도록주의하십시오.
Rui F Ribeiro

1
SD 카드는 포맷 코드가없는 장치에서 바로 사용할 수 있습니다. 그것은 단지 컨벤션이 아니라 실제로 표준이 있습니다. 다른 파일 시스템의 사용은 표준에서 지원하지 않습니다. 저렴한 SD 카드는이를 기반으로 가정합니다. 이것은 내 대답에서 참조됩니다. 파일을 저장하는 데 사용할 수없는 포맷되지 않은 파티션이 아닌 표준 포맷을 따릅니다.
sourcejedi

답변:


0

REMINDER : 이와 같은 명령은 파일 시스템 데이터를 덮어 쓰도록 설계되었습니다. 잘못된 디스크를 대상으로하지 않도록 각별히주의해야합니다.

편집하다:

카드를 포맷하기 전에 폐기 작업을 수행 할 수도 있습니다.

blkdiscard /dev/mmcblk0

SATA SSD의 TRIM과 같은 성능이 향상 될 수 있습니다. 블록 재 매핑 계층을 재설정하면 이론적으로 해당 계층 또는 그 주변의 손상을 해결하는 데 도움이 될 수 있지만이 방법은 전용 전체 장치 지우기 명령 (SATA 보안 지우기)만큼 좋지 않습니다. 모든 카드 리더에서이 기능을 지원하지는 않습니다. 내 Dell Latitude 랩톱에서 1 초 안에 카드를 모두 0으로 재설정합니다. 이것은이 카드에서 블록 리매핑 레이어에만 영향을 미쳤다는 것을 의미합니다. 16GB 플래시 전체를 즉시 지울 수는 없습니다.


MicroSD 카드에는 하나 이상의 플래시 칩과 SD 카드 사양과 플래시 칩 간의 인터페이스 역할을하는 소형 마이크로 프로세서가 포함되어 있습니다. 카드는 일반적으로 거의 최적의 성능을 위해 출고시 포맷되어 있습니다. 그러나 대부분의 운영 체제 기본 파티셔닝 및 포맷 유틸리티는 카드를 기존 하드 드라이브처럼 취급합니다. 기존 하드 드라이브에서 작동하는 기능으로 플래시 기반 카드의 성능과 수명이 저하됩니다

http://3gfp.com/wp/2014/07/formatting-sd-cards-for-speed-and-lifetime/

스크립트는 최대 32GiB의 카드에 사용할 수 있습니다. 의 현재 버전에서 작동하도록 수정했습니다 sfdisk. file -s결과 파티션에서 실행 하면 트랙 당 헤드 / 섹터 수를 제외하고 이전과 동일한 숫자가 반환되었습니다. 일부 임베디드 부트 로더에는 특정 값이 필요하지만 현재 운영 체제에서는 사용하지 않습니다.

#! /bin/sh
# fdisk portion of script based on mkcard.sh v0.4
# (c) Copyright 2009 Graeme Gregory <dp@xora.org.uk>
# Additional functionality by Steve Sakoman
# (c) Copyright 2010-2011 Steve Sakoman <steve@sakoman.com>
# Updated by Alan Jenkins (2016)
# Licensed under terms of GPLv2
#
# Parts of the procudure base on the work of Denys Dmytriyenko
# http://wiki.omap.com/index.php/MMC_Boot_Format

# exit if any command fails
set -e

export LC_ALL=C

format_whole_disk_fat32() {
    if ! id | grep -q root; then
        echo "This utility must be run prefixed with sudo or as root"
        return 1
    fi

    local DRIVE=$1

    # Make sure drive isn't mounted    
    # so hopefully this will fail e.g. if we're about to blow away the root filesystem
    for mounted in $(findmnt -o source | grep "^$DRIVE") ; do
        umount "$mounted"
    done    

    # Make sure current partition table is deleted
    wipefs --all $DRIVE

    # Get disk size in bytes
    local SIZE=$(fdisk -l $DRIVE | grep Disk | grep bytes | awk '{print $5}')
    echo DISK SIZE – $SIZE bytes

    # Note: I'm changing our default cluster size to 32KiB since all of
    # our 8GiB cards are arriving with 32KiB clusters. The manufacturers
    # may know something that we do not *or* they're trading speed for
    # more space.
    local CLUSTER_SIZE_KB=32
    local CLUSTER_SIZE_IN_SECTORS=$(( $CLUSTER_SIZE_KB * 2 ))

    # This won't work for drives bigger than 32GiB because
    # 32GiB / 64kiB clusters = 524288 FAT entries
    # 524288 FAT entries * 4 bytes / FAT = 2097152 bytes
    # 2097152 bytes / 512 bytes = 4096 sectors for FAT size
    # 4096 * 2 = 8192 sectors for both FAT tables which leaves no
    # room for the BPB sector
    if [ $SIZE -ge $(( ($CLUSTER_SIZE_KB / 2) * 1024 * 1024 * 1024 )) ]; then
        echo -n "This drive is too large, >= $(($CLUSTER_SIZE_KB / 2))GiB, for this "
        echo "formatting routine."
        return 1
    fi

    # Align partitions for SD card performance/wear optimization
    # Summary: start 1st partition at sector 8192 (4MiB) and align FAT32
    #          data to start at 8MiB (4MiB logical)
    #          There's a document that explains why, but its too long to
    #          reproduce here.
    {
    echo 8192,,0x0C,*
    } | sfdisk -uS -q $DRIVE

    sleep 1

    if [ -b ${DRIVE}1 ]; then
        PART1=${DRIVE}1
    elif [ -b ${DRIVE}p1 ]; then
        PART1=${DRIVE}p1
    else
        echo "Improper partitioning on $DRIVE"
        return 1
    fi

    # Delete any old filesystem visible in new partition
    wipefs --all $PART1

    # Format FAT32 with 64kiB clusters (128 * 512)
    # Format once to get the calculated FAT size
    local FAT_SIZE=$(mkdosfs -F 32 -s $CLUSTER_SIZE_IN_SECTORS -v ${PART1} | \
        sed -n -r -e '/^FAT size is/ s,FAT size is ([0-9]+) sectors.*$,\1,p')

    # Calculate the number of reserved sectors to pad in order to align
    # the FAT32 data area to 4MiB
    local RESERVED_SECTORS=$(( 8192 - 2 * $FAT_SIZE ))

    # Format again with padding
    mkdosfs -F 32 -s $CLUSTER_SIZE_IN_SECTORS -v -R $RESERVED_SECTORS ${PART1}

    # Uncomment to label filesystem
    #fatlabel ${PART1} BOOT
}

#set -x

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