Hirdetés

Hirdetés

!!! SZERVERLEÁLLÁS, ADATVESZTÉS INFORMÁCIÓK !!!
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!

Aktív témák

  • Jester01

    veterán

    válasz Jester01 #37261 üzenetére

    OK, vagy régi volt a kernel vagy nem vártam eleget. Most egy 3.2.0 verzióval próbáltam, jó sokat kellett várni de végül törlődött az a fránya szektor.
    Továbbá ráleltem a meghajtó szintű kapcsolóra is:

    $ cat /sys/bus/scsi/devices/0:0:0:0/scsi_disk/0:0:0:0/thin_provisioning
    1
    $ cat /sys/bus/scsi/devices/0:0:0:0/scsi_disk/0:0:0:0/provisioning_mode
    writesame_16

    Nyilván a megfelelő eszközre kell kiadni, a /sys/block/sdX irányából is megközelíthető. Az első az egy 0/1 kapcsoló ami mutatja, hogy be van-e kapcsolva a trim, a második pedig a konkrét megvalósítást.

    A nyílt forráskód egyik előnye, hogy meg lehet nézni mi zajlik a színfalak mögött. :C
    A SATA eszközök manapság SCSI emuláción keresztül látszanak, ezt jelzi a /dev/sdX név is. Az emulációt a libata réteg végzi.
    Azt, hogy az eszköz ismeri a trimet, az ata_scsiop_inq_b0 függvény jelenti le a magasabb rétegeknek, imígyen:

    if (ata_id_has_trim(args->id)) {
    put_unaligned_be64(65535 * 512 / 8, &rbuf[36]);
    put_unaligned_be32(1, &rbuf[28]);
    }

    Ennek hatására ha a fájlrendszer támogatja és be van abban is kapcsolva, a rendszer WRITE SAME w/ UNMAP SCSI parancsot küld amiből az ata_scsi_write_same_xlat függvény csinál ATA DSM w/ TRIM parancsot:

    /* for now we only support WRITE SAME with the unmap bit set */
    ...
    tf->protocol = ATA_PROT_DMA;
    tf->hob_feature = 0;
    tf->feature = ATA_DSM_TRIM;
    tf->hob_nsect = (size / 512) >> 8;
    tf->nsect = size / 512;
    tf->command = ATA_CMD_DSM;
    tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE | ATA_TFLAG_LBA48 |
    ATA_TFLAG_WRITE;

Aktív témák