linux 文件擦除,linux文件系统如何使用emmc的擦除功能(Erase Trim Discard Sanitize)达到最优performance...

1、android init.rc中可以看到, 系统启动mount /data 目录时,mount命令添加了参数:discard

mount ext4 /emmc@usrdata /data noatime nosuid nodev wait noauto_da_alloc,discard

2、

mount的discard参数传递到ext4_mount函数的flags参数

//kernel/fs/ext4/super.c

static struct dentry *ext4_mount(struct file_system_type *fs_type, int flags,

const char *dev_name, void *data)

{return mount_bdev(fs_type, flags, dev_name, data, ext4_fill_super);

}

//kernel/fs/super.c

struct dentry *mount_bdev(struct file_system_type *fs_type,

int flags, const char *dev_name, void *data,

int (*fill_super)(struct super_block *, void *, int))

{

struct block_device *bdev;

struct super_block *s;

fmode_t mode = FMODE_READ | FMODE_EXCL;

int error = 0;

.................

s->s_flags = flags | MS_NOSEC;    //将mount flag保存在sb的s_flags成员中

s->s_mode = mode;

strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id));

sb_set_blocksize(s, block_size(bdev));

error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);   //调用ext4的fill super :ext4_fill_super, 通过sb传递mount flag

.........................

return dget(s->s_root);

}

//kernel/fs/ext4/super.c

static int ext4_fill_super(struct super_block *sb, void *data, int silent)

{

...................

if (!parse_options((char *) data,sb, &journal_devnum,

&journal_ioprio, 0))

....................

static const struct mount_opts {

inttoken;

intmount_opt;

intflags;

} ext4_mount_opts[] = {

...........................

{Opt_discard, EXT4_MOUNT_DISCARD, MOPT_SET},

{Opt_nodiscard, EXT4_MOUNT_DISCARD, MOPT_CLEAR},

.............................................

}

2、/kernel/drivers/mmc/card/block.c

if (req && req->cmd_flags & REQ_DISCARD) {

...

ret = mmc_blk_issue_discard_rq(mq, req);

} else if (req && req->cmd_flags & REQ_FLUSH) {

/* complete ongoing async transfer before issuing flush */

if (card->host->areq)

mmc_blk_issue_rw_rq(mq, NULL);

ret = mmc_blk_issue_flush(mq, req);

} else {

ret = mmc_blk_issue_rw_rq(mq, req);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux的SSD TRIM是一种用于优化固态硬盘(SSD)性能和寿命的技术。TRIM是一项操作系统级别的指令,用于通知SSD哪些数据块不再被使用,可以被擦除和重写。这有助于提高SSD的写入性能,并减少因为重写未使用数据块而引起的性能下降。 要启用SSD TRIM功能,您需要进行以下步骤: 1. 确保您的SSD支持TRIM。大多数现代SSD都支持这个功能,但一些较旧或低端的SSD可能不支持。您可以查看SSD制造商的文档或技术规格来确认它是否支持TRIM。 2. 检查您的Linux发行版是否已启用TRIM。大多数现代Linux发行版默认情况下已启用TRIM。您可以运行以下命令来检查: ``` sudo systemctl status fstrim.timer ``` 如果输出显示"active"或"enabled",则表示TRIM已启用。 3. 确保您的文件系统支持TRIM。大多数常见的文件系统,如ext4和XFS,都支持TRIM。您可以通过检查`/etc/fstab`文件中的文件系统挂载选项来确认是否启用了TRIM。 例如,对于ext4文件系统,您应该看到类似于以下内容的挂载选项: ``` UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 discard,noatime,errors=remount-ro 0 1 ``` 请注意,`discard`选项用于启用TRIM。 4. 手动运行TRIM命令。如果TRIM没有自动运行,您可以手动运行TRIM命令来清理未使用的数据块。使用以下命令: ``` sudo fstrim -av ``` 这将触发对所有已挂载文件系统TRIM操作。 请谨慎使用TRIM命令,因为它会触发SSD上的擦除操作,可能会导致数据丢失。确保在运行TRIM之前备份重要数据。 希望这些信息对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值