我运行 scalpel 来恢复文件。输入磁盘是我使用 ddrescue 制作的故障 Windows 磁盘的副本。输出目录(来自 scalpel)位于我的 Linux 磁盘上的 exfat 分区上。我使用 exfat 是因为 Windows 可以查看和读取该分区 - 而这些分区来自 Windows。
我无法更改文件的所有权。它们归 root 所有。
例如,在目录中/media/me/restored/output/jpg-1-0
-rwxrwxrwx 1 root root 2983 Dec 29 23:14 00003483.jpg
$sudo chown me 00003483.jpg
chown:更改“00003483.jpg”的所有权:操作不允许
$sudo chattr -i 00003483.jpg
chattr:读取 00003483.jpg 上的标志时未实现该函数
我也无法改变目录的所有权。
我也尝试过sudo su -
我可以使用 eog(命令行 - 图像查看器)打开恢复的 .jpg 文件,但无法使用 Kria(Linux 图像编辑器,GUI)打开该文件。
为什么 scalpel 上的网站没有告诉您如何更改文件权限? 问题是与 exfat 不兼容吗?
谢谢你的帮助。
更新
卸载分区,将“已恢复”目录的所有权更改为我的用户 ID,然后运行,但sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdb4 /media/me/restored
不起作用。“已恢复”目录现在再次归 root 所有,我尝试上述步骤时得到的结果完全相同。
更新-添加调试信息
lsblk -f
sdb
├─sdb1 vfat xxxx-xxxx /boot/efi
├─sdb2 ext4 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /
├─sdb3 swap xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx [SWAP]
└─sdb4 exfat SSD-D xxxx-xxxx /media/me/rest
更新
关于已接受的答案,这个问题已在第一次更新中使用上面给出的 mount 命令修复,还有其他问题 - 我不知道具体是什么。当我第一次这样做时,文件的所有权仍然是 root。mount 命令是相同的,因为我将它从终端复制到了这里。所有恢复的文件现在都归我所有(不是 root)。
答案1
原始答案
您无法更改单个文件(或目录)的所有权。Microsoft 文件系统(exFAT、Fat32 和 NTFS)中的所有权和权限是在挂载时设置的,更改它的唯一方法(对于 Linux)是重新挂载文件系统(或卸载并重新挂载)。
详情请见此链接。
反馈后编辑
来自您计算机的输出:
lsblk -f
loop0
└─cryptswap1
swap cbxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx [SWAP]
sda isw_raid_m
├─sda1 vfat SYSTEM_DRV 90xx-xxxx
├─sda2 isw_raid_m
├─sda3 ntfs Windows E2xxxxxxxxxxxxxx /media/me/Wind
├─sda4 exfat Restored B4xx-xxxx /media/me/Rest
└─sda5 ntfs WINRE_DRV B2xxxxxxxxxxxxxx
sdb
├─sdb1 vfat A3xx-xxxx /boot/efi
├─sdb2 ext4 3bxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /
├─sdb3 swap 3cxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx [SWAP]
└─sdb4 exfat SSD-D 4Cxx-xxxx /media/me/rest
sdc
├─sdc1 vfat ESP A2xx-xxxx
├─sdc2 vfat DIAGS 9Exx-xxxx
├─sdc3 ntfs WINRETOOLS 72xxxxxxxxxxxxxx
├─sdc4 ntfs OS 92xxxxxxxxxxxxxx
└─sdc5
cat /etc/mtab # edited to focus on the relevant lines
/dev/sdb4 /media/me/restored fuseblk rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096 0 0
你有不是更改了正在运行操作系统的驱动器上的 exfat 分区的用户 ID(0 <---> root)
/dev/sdb2 / ext4 rw,relatime,errors=remount-ro,stripe=256 0 0
/dev/sdb1 /boot/efi vfat rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
为了进行比较,请参见我的计算机的以下输出
sudodus@bionic64 ~ $ lsblk -f /dev/sdc
sdc iso9660 Xubuntu Core 19.10 - amd64 2019-10-17-15-54-31-00
├─sdc1 iso9660 Xubuntu Core 19.10 - amd64 2019-10-17-15-54-31-00 /media/sudodus/Xubuntu Core 19.10 - amd64
├─sdc2 vfat 866D-0A62
└─sdc3 exfat USBDATA 5673-C08D /media/sudodus/USBDATA
我的 exfat 文件系统是/dev/sdc3
,我检查了权限,
sudodus@bionic64 ~ $ grep 'sdc3' /etc/mtab
/dev/sdc3 /media/sudodus/USBDATA fuseblk rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096 0 0
卸载分区,
sudodus@bionic64 ~ $ sudo umount /dev/sdc3
[sudo] lösenord för sudodus:
根据链接答案中的说明挂载分区(针对实际设备 /dev/sdc3 进行了修改。
sudodus@bionic64 ~ $ sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdc3 /mnt/sd1
FUSE exfat 1.2.8
检查所有权(是的,是我)和权限ls -l
sudodus@bionic64 ~ $ sudo ls -l /mnt/sd1
totalt 128
-rw-rw---- 1 sudodus root 29 dec 29 17:49 hej.txt
创建子目录
sudodus@bionic64 ~ $ mkdir /mnt/sd1/subdir
创建一个文件(作为普通用户),
sudodus@bionic64 ~ $ echo "Hello World" > /mnt/sd1/hello.txt
最后验证它是否有效并检查所有权和权限
sudodus@bionic64 ~ $ sudo ls -l /mnt/sd1
totalt 384
-rw-rw---- 1 sudodus root 29 dec 29 17:49 hej.txt
-rw-rw---- 1 sudodus root 12 dec 30 15:56 hello.txt
drwxrwx--- 1 sudodus root 131072 dec 30 15:54 subdir
sudodus@bionic64 ~ $
/dev/sdb4
建议使用 exfat 的命令行
我假设你的用户ID是1000(第一个创建的用户ID),
检查
grep "^$USER" /etc/group
并uid=1000
根据需要进行修改。
sudo umount /dev/sdb4
sudo mkdir /mnt/sd4 # create mount point (only once)
sudo mount -o rw,user,uid=1000,dmask=007,fmask=117 /dev/sdb4 /mnt/sd4
编辑2
如果你有问题,你可能需要当前版本的 exfat 工具,
sudo apt update
sudo apt install exfat-utils exfat-fuse
编辑3
您可能希望在启动时自动挂载 exfat 分区。在这种情况下,我建议在您的文件中添加以下几行/etc/fstab
,
# partition with exfat file system
UUID=4Cxx-xxxx /mnt/sd4 exfat defaults,rw,user,uid=1000,dmask=007,fmask=117 0 0
修改UUID=4Cxx-xxxx
以匹配文件系统的实际 UUID。
请参阅man fstab
有关这六个字段的详细描述。