fstrim --fstab --verbose ## 回收(discard)文件系统上对应磁盘未使用的块
blkdiscard /dev/nvme1n1 ## 回收并擦除(discard)整个SSD块设备
wipefs -a /dev/nvme1n1 ## 擦除(erase)文件系统的签名 fstrimfstrim命令实际可以视为手动对SSD磁盘下发TRIM指令。使用-v参数可以直接查看TRIM回收擦除空间的大小。fstrim是针对已挂载的文件系统的SSD分区root@xxxx:~# fstrim --help
Usage:
fstrim [options] <mount point>Discard unused blocks on a mounted filesystem.
Options:
-a, --all trim all supported mounted filesystems
-A, --fstab trim all supported mounted filesystems from /etc/fstab
-o, --offset <num> the offset in bytes to start discarding from
-l, --length <num> the number of bytes to discard
-m, --minimum <num> the minimum extent length to discard
-v, --verbose print number of discarded bytes
-n, --dry-run does everything, but trim
-h, --help display this help
-V, --version display version
For more details see fstrim(8). 以下是执行后返回的结果,以NVMe 为列/home: 32.5 GiB (313011310592 bytes) trimmed on /dev/mapper/gat204--vg-root
/boot/efi: 102.2 MiB (607301632 bytes) trimmed on /dev/nvme1n1p1
/boot: 732.5 MiB (825778176 bytes) trimmed on /dev/nvme1n1p2
/: 60.7 GiB (65154805760 bytes) trimmed on /dev/mapper/gat204--vg-swap_1 ubuntu与debian的systemd 服务可以定时执行fstrim,省去手写crontab脚本工作。systemctl status fstrim.timer ##查询服务状态
systemctl enable fstrim.timer ##开启定时TRIM功能 blkdiscardblkdiscard用于擦除(discard)SSD设备扇区,和fstrim不同这条命令直接用在块设备上,默认擦除整个块设备的所有扇区。root@xxxx:~# blkdiscard -help
Usage:
blkdiscard [options] <device>Discard the content of sectors on a device.
Options:
-o, --offset <num> offset in bytes to discard from
-l, --length <num> length of bytes to discard from the offset
-p, --step <num> size of the discard iterations within the offset
-s, --secure perform secure discard
-z, --zeroout zero-fill rather than discard
-v, --verbose print aligned length and offset
-h, --help display this help
-V, --version display version
For more details see blkdiscard(8).
root@ECSab169d:~# man blkdiscard 擦除(discard)成功后,没有返回结果root@xxxx:~# blkdiscard /dev/nvme1n1
root@xxxx:~# wipefswipefs是linux自带的程序,用来擦除(erase)文件系统的签名,不会清空文件系统或设备中的任何其他数据。默认情况下, wipefs 不会擦除非整个磁盘设备上的嵌套分区表。为此,需要—force选项。root@gat204:~# wipefs --help
Usage:
wipefs [options] <device>Wipe signatures from a device.
Options:
-a, --all wipe all magic strings (BE CAREFUL!)
-b, --backup create a signature backup in $HOME
-f, --force force erasure
-i, --noheadings don't print headings
-J, --json use JSON output format
-n, --no-act do everything except the actual write() call
-o, --offset <num> offset to erase, in bytes
-O, --output <list> COLUMNS to display (see below)
-p, --parsable print out in parsable instead of printable format
-q, --quiet suppress output messages
-t, --types <list> limit the set of filesystem, RAIDs or partition tables
-h, --help display this help
-V, --version display version
Available output columns:
UUID partition/filesystem UUID
LABEL filesystem LABEL
LENGTH magic string length
TYPE superblok type
OFFSET magic string offset
USAGE type description
DEVICE block device name
For more details see wipefs(8). 检查SSD是否支持TRIM##可以通过 /sys/block 下的信息来判断 SSD 支持 TRIM, discard_granularity 非 0 表示支持。
# cat /sys/block/sda/queue/discard_granularity
0
# cat /sys/block/nvme0n1/queue/discard_granularity
512 存储元器件(闪存颗粒类别)SSD的储存是NAND-Flash闪存颗粒,分为SLC、MLC和QLC四种。可以粗略地把闪存颗粒理解成是一个电容加上电压计的组合。一个电容能存放一个比特的数据,电压计使电容能区分不同电压,不同的电压能存放更多的比特数据。

NAND-Flash读写流程Page是NAND-Flash单次读写单位,大小一般为4K或者4K字节的倍数,写操作只能写到空的 page,而清除数据(Erase) 是以 块(block) 为单位的。块的擦除次数有寿命限制,超限制就会变成坏块。
用户对SSD的写入数据操作可以分为两种类型1.原来SSD磁盘上没有数据,写入数据。2.SSD磁盘上有数据,对该数据进行修改(包括删除)。前者只需把数据直接写入到空白页即可,后者则是read-modify-write方式操作,读取原有page的内容到缓存中并进行更新,最后写入到其他空的page,原有的page置为无效页。可以想象对文件的持续反复的修改,将会产生大量的无效页,这就需要“垃圾回收”(Garbage Collection-gc)机制来回收这些无效页,否则可以写入空间越来越小。 FTL 和磨损均衡SSD的主控执行磨损均衡(Wear-Leveling)策略,使SSD磁盘各个块的擦除次数均匀分摊到各个块上。就像内存MMU一样,SSD内部使用闪存转换层(FTL)存放了逻辑块地址(Logical
Block Address,简称 LBA)到物理块地址(Physical Block Address,简称
PBA)的映射。操作系统访问的硬盘地址,其实都是逻辑地址。只有通过 FTL
转换之后,才会变成实际的物理地址,找到对应的块进行访问。操作系统本身,不需要去考虑块的磨损程度,只要和操作机械硬盘一样来读写数据就好了。
“垃圾回收”机制写入放大(write amplification)上文提及过数据的反复修改会产生大量的无效页,一旦整个块(block)的空间不足以写入数据,SSD会将这个块(block)的数据读入到缓存中,擦除这个块(block)所中的页,然后再把缓存中已更新的数据写入进去。这种read-erase-modify-write过程,就好比写入的数据可能只有一个页4KB,但实际要擦除并且写N个页,称之为写入放大。写入放大的倍数越大,写入的速度就越慢。
TRIM指令我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于
我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不
我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia
我正在使用mechanize登录网站,然后检索页面。我遇到了一些问题,我怀疑这是由于cookie中的某些值造成的。当Mechanize登录网站时,我假设它存储了cookie。如何通过Mechanize打印出存储在cookie中的所有数据? 最佳答案 代理有一个cookie方法。agent=Mechanize.newpage=agent.get("http://www.google.com/")agent.cookiesagent.cookies.to_scookie返回一个Mechanize::Cookiesobject
我以为它们存储在cookie中-但不,检查cookie没有任何结果。session也不存储它们。那么,我在哪里可以找到它们?我需要这个来直接设置它们(而不是通过flashhash)。 最佳答案 它们存储在inyoursessionstore.自rails2.0以来的默认设置是cookie存储,但请检查config/initializers/session_store.rb以检查您是否使用默认设置以外的东西。 关于ruby-on-rails-闪存消息存储在哪里?,我们在StackOverf
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?
对于我正在编写的Rails3应用程序,我正在考虑从本地文件系统上的XML、YAML或JSON文件中读取一些配置数据。重点是:我应该把这些文件放在哪里?Rails应用程序中是否有用于存储此类内容的默认位置?附带说明一下,我的应用程序部署在Heroku上。 最佳答案 我经常做的是:如果文件是通用配置文件:我在目录/config中创建一个YAML文件,每个环境有一个上层key如果我为每个环境(大项目)创建一个文件:我为每个环境创建一个YAML并将它们存储在/config/environments/然后我在加载YAML的地方创建了一个初始化