Reformatear tarjeta SD

Reformatear tarjeta SD

Necesito reformatear una tarjeta SD al estado de fábrica.

El sistema de archivos de la tarjeta SD utilizado para los medios se ha dañado. Acceder a un determinado directorio hace que el sistema de archivos se vuelva a montar en modo de solo lectura y no se puede eliminar. fsck.vfat dice que no tiene un método de reparación para el tipo específico de corrupción.

Respuesta1

RECORDATORIO: comandos como este están diseñados para sobrescribir datos del sistema de archivos. Debe tener mucho cuidado para evitar apuntar al disco equivocado.

EDITAR:

Antes de formatear la tarjeta, es posible que también desees realizar una operación de descarte.

blkdiscard /dev/mmcblk0

Esto podría mejorar el rendimiento, al igual que TRIM en un SSD SATA. En teoría, restablecer la capa de reasignación de bloques también podría ayudar a resolver la corrupción en esa capa o alrededor de ella, aunque este método no es tan bueno como un comando dedicado de borrado completo del dispositivo (borrado seguro de SATA). Es posible que esto no sea compatible con todos los lectores de tarjetas. En mi computadora portátil Dell Latitude, restableció la tarjeta a ceros en un segundo. Esto implica que en esta tarjeta solo afectó la capa de reasignación de bloques; no puede haber realizado un borrado inmediato de los 16 GB completos de memoria flash.


Las tarjetas MicroSD contienen uno o más chips flash y un pequeño microprocesador que actúa como interfaz entre la especificación de la tarjeta SD y los chips flash. Las tarjetas normalmente vienen formateadas de fábrica para un rendimiento casi óptimo. Sin embargo, la mayoría de los sistemas operativos utilizan utilidades predeterminadas de partición y formateo para tratar las tarjetas como discos duros tradicionales. Lo que funciona con los discos duros tradicionales da como resultado una degradación del rendimiento y la vida útil de las tarjetas basadas en flash

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

Hay un script disponible para tarjetas de hasta 32 GiB. Lo he modificado para que funcione con las versiones actuales de sfdisk. La ejecución file -sen la partición resultante arrojó los mismos números que antes, excepto por el número de cabezales/sectores por pista. Estos no son utilizados por los sistemas operativos actuales, aunque aparentemente algunos cargadores de arranque integrados requerirán valores específicos.

#! /bin/sh
# fdisk portion of script based on mkcard.sh v0.4
# (c) Copyright 2009 Graeme Gregory <[email protected]>
# Additional functionality by Steve Sakoman
# (c) Copyright 2010-2011 Steve Sakoman <[email protected]>
# 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 "$@"

información relacionada