相关疑难解决方法(0)

独立验证TRIM确实适用于SSD

我有一个luksOpen的LUKS分区:/dev/sda1--allow-discards

cryptsetup --allow-discards luksOpen /dev/sda1 root
Run Code Online (Sandbox Code Playgroud)

然后我ext4使用discard选项挂载文件系统:

grep /dev/mapper/root /proc/mounts
/dev/mapper/root / ext4 ro,relatime,block_validity,discard,delalloc,barrier,user_xattr,acl 0 0
Run Code Online (Sandbox Code Playgroud)

然后我修剪已安装分区上的可用空间:

fstrim -v /
Run Code Online (Sandbox Code Playgroud)

df,我看到/有80%的可用空间。这意味着在 上/dev/sda1,磁盘的 80% 是二进制零。

如果我克隆图像 cat

cat /dev/sda1 > sda1.img
Run Code Online (Sandbox Code Playgroud)

并使用 压缩图像xz,我希望磁盘上的所有零都被压缩。由于磁盘上 20% 的数据是加密的,因此它看起来应该是随机的并且是不可压缩的。因此,xz 压缩的图像应该是近似的。原始尺寸的 20%。

但是,生成的 xz 压缩图像与原始原始图像的大小大致相同。

我的推理正确吗?

为什么我的理论没有转化为实践?

ssd ext4 cryptsetup trim fstrim

13
推荐指数
2
解决办法
2832
查看次数

读取文件末尾以恢复数据

一个非常旧的 .swp 文件还原了我正在编辑的文件,因此它现在明显更短。从那以后我没有在那个目录中做任何事情,所以紧跟在文件末尾的字节应该仍然有我的数据。我可以使用什么函数从给定的内存地址读取 N 个字节?ddread在文件边界处停止,除非我错过了某个选项。

当前文件大小为 3.2 KB。我不记得文件被截断之前到底有多大,但可能不超过 10 KB。如何从文件开头读取 10 KB,忽略文件边界?数据保存不完美也没关系,只要我不用从头开始。

data-recovery

12
推荐指数
1
解决办法
1099
查看次数

为什么dd命令可以恢复使用shred删除的文件?

我使用 找到了文件的索引节点ls -li。\n然后我在磁盘上找到了文件\xe2\x80\x99s 起始块。\n我使用命令将该块的内容复制到另一个目录。\n然后我使用该实用程序dd粉碎了该文件shred: shred -uvz -n=10 file1.txt.\n我dd再次运行了相同的命令。文件已恢复。文件被粉碎后我应该得到 00000 。我缺少什么?

\n

在第二次迭代中,我shred -vz -n=10 file2.txt改为运行,这不会删除文件。\n按照与之前相同的步骤,我再次能够使用命令dd和块位置恢复原始文件。\n但是,粉碎文件的内容为 00000,如下所示显示为hexdump file2.txt.\n我缺少什么?

\n

filesystems security

11
推荐指数
1
解决办法
2252
查看次数

提取inode指向的数据块与文件中的数据对应失败

这个问题是从以下问题衍生出来的:如何从磁盘中提取原始 ext3 inode 数据?

我有一个文件/tmp/foo,其内容是一个简单的文本字符串“AAA”。我想找到这个数据所在的磁盘块,提取这个块中的数据并确保它确实包含“AAA”。所以我执行以下操作:

  1. stat foo 它告诉我它的 inode 号是 318903
  2. debugfs -R 'imap <318903>' /dev/vda3 这告诉我这个 inode 位于块 1277956,偏移量 0x0600
  3. dumpe2fs /dev/vda3 这表明块大小为 4096(字节),inode 大小为 256(字节)
  4. 计算 inode 从磁盘开始的 256 字节块中的偏移量(使使用 dd 提取一个 256 字节块更简单):(1277956 x 4096) + (1536) / 256 = 20447302
  5. 从磁盘中提取inode(原始数据):dd if=/dev/sda3 of=/tmp/inode.0 bs=256 count=1 skip=20447302
  6. 查看ext2 inode表的结构(ext3 inode结构相同):http : //www.nongnu.org/ext2-doc/ext2.html#INODE-TABLE
  7. 进行一些测试,以确定我是否已经提取了正确的inode块: chgrp 1 /tmp/foo; dd if=/dev/sda3 of=/tmp/inode.1 bs=256 count=1 skip=20447302; cmp -l /tmp/inode.1 /tmp/inode.0。cmp 的输出如下:
13 217 362
14 225 222
25 …
Run Code Online (Sandbox Code Playgroud)

ext3

8
推荐指数
0
解决办法
1470
查看次数

在 SSD 和 HDD 上配置 mdadm RAID-1

我需要在一个 SSD 和一个 HDD 上配置 RAID-1。SSD 和 HDD 都有一些我不需要的预装软件,因此如果有任何优势,它们都可以完全擦除。

到目前为止,我的研究使我找到了这个--write-mostly选项,我知道我应该在 HDD 上使用它,以便读取操作可以获得 SSD 的全速。

但是我不清楚如何确保正确使用 TRIM 命令。

我在设置期间阅读了有关 mdadm 写入设备每个扇区的警告,无论在设置突袭之前执行了任何 TRIM,SSD 都没有备用扇区。

我最好先创建以 SSD 作为唯一设备而降级的 RAID,然后添加 HDD,以便只有 HDD 被写入?

在设置 RAID 之前,我需要对 SSD 做什么,以便执行任何需要的 TRIM?SSD 预装了软件(我不需要),这意味着我不知道以前写入了哪些扇区。

如果有任何相关性,SSD 是 128GB,并且在SAMSUNG MZ7LF128HCP-00000, FXT0101Qata 层和SAMSUNG MZ7LF128 101Q PQsd 层提到的 dmesg 输出中。

linux ssd mdadm trim

6
推荐指数
1
解决办法
3411
查看次数

如何检查TRIM?

我在带有三星 PM851 SSD 的戴尔 XPS 9343 上安装了 Linux。
我最近读到许多 SSD 不支持 TRIM 操作。
所以我想检查discard选项是否在我的系统上有效。

第一步,我尝试简单地运行sudo fstrim --verbose --all并报告41GB trimmed;这让我感到害怕,因为我一直期待一个很小的价值,因为我一直启用 TRIM(见上文);事实上,如果我再次重新运行该命令,我会得到O bytes trimmed. 正常吗? 即使我在 /etc/fstab 中有丢弃选项?

PS:我尝试遵循此处提出的解决方案但由于trim.test: FIBMAP unsupported.
PS2:它是带有 GPT 和 EXT4 文件系统的平面SSD(无 LVM 或 RAID)

storage ssd ext4 trim fstrim

5
推荐指数
2
解决办法
2万
查看次数

无法在 SSD 上启用 TRIM

我无法在新安装的 SSD 上启用 TRIM。Ubuntu Server 12.04,Linux 3.11.0-15-generic。我通过 /etc/fstab 中的丢弃设置打开了 TRIM。TRIM 也不适用于 fstrim 命令。

以下是我检查 TRIM 是否有效的方法:

#for i in {1..100000}; do echo "1" >> tempfile; done
#sudo hdparm --fibmap tempfile
#sudo hdparm --read-sector 293865512 /dev/sda
#rm tempfile
#sync
#sudo hdparm --read-sector 293865512 /dev/sda
Run Code Online (Sandbox Code Playgroud)

在启用 TRIM 的情况下,hdparm --read-sector 命令的第二次运行应返回零,但结果与该命令的第一次运行相同。

fstrim 命令不起作用:

#sudo fstrim -v /
/: 0 bytes were trimmed
Run Code Online (Sandbox Code Playgroud)

这是 hdparm -i /dev/sda 的结果:

Model=KINGSTON SV300S37A240G, FwRev=520ABBF0, SerialNo=50026B7243004D3E
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4 …
Run Code Online (Sandbox Code Playgroud)

ubuntu ssd trim

4
推荐指数
1
解决办法
1689
查看次数

为什么 fstrim 似乎不修剪 btrfs (+ecrypts) 上的数据块?

我有一个带有多个分区的 SSD 磁盘。其中之一是有一个 btrfs 卷,安装为/home,其中包含一个 ecryptfs 主目录。

当我修剪卷时,似乎 fstrim 不会修剪此类卷上的数据块 - 为什么?您可以在下面看到有关设置的所有信息,以及我遵循的步骤,以及注释。

$ cat /etc/fstab

UUID=xxx /               ext4    errors=remount-ro 0       1
UUID=yyy /media/vfio     ext4    defaults          0       2
UUID=zzz /home           btrfs   defaults          0       2
Run Code Online (Sandbox Code Playgroud)

$ mount | grep sda

/dev/sda5 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/sda1 on /media/vfio type ext4 (rw,relatime,stripe=32721,data=ordered)
/dev/sda2 on /home type btrfs (rw,relatime,ssd,space_cache,subvolid=5,subvol=/)
Run Code Online (Sandbox Code Playgroud)

$ ls -la /home /home/myuser/.Private # summary

/home:
.ecryptfs
myuser

/home/myuser/.Private -> /home/.ecryptfs/myuser/.Private
Run Code Online (Sandbox Code Playgroud)

$ df -h

Filesystem              Size …
Run Code Online (Sandbox Code Playgroud)

filesystems btrfs ecryptfs trim fstrim

4
推荐指数
1
解决办法
1586
查看次数