1

在我的家里,我有 2 台 PC、我的主要 Windows 游戏平台和一个 ubuntu 13.04 文件服务器。(不运行 ubuntu 服务器只是普通的 ubuntu)

我有用 luks 加密的操作系统驱动器(通过安装)

但我有 5 个 Truecrypt 加密硬盘。他们需要保留 truecrypt 以满足我的需求。我有以下 2 个脚本设置来在 PC 启动时安装我的驱动器。

这个简单的打开终端并运行下一个脚本 -

#!/bin/bash
sleep 10

gnome-terminal -e /home/kun7/.TrueCrypt/mount_truecrypt_volumes.sh

然后运行以下代码以获取 truecrypt 密码并将驱动器安装到我的指定点(需要转到我的其他程序/库/快捷方式等的指定点

#!/bin/bash

echo "Enter password ..."

oldConfig=`stty -g`
stty -echo
read password
stty $oldConfig

echo "Opening Pandora's Box ..."


truecrypt -t /dev/sdb5 /media/P --password="$password"  -k "" --protect-hidden=no
truecrypt -t /dev/sda1 /media/B --password="$password"  -k "" --protect-hidden=no
truecrypt -t /dev/sdd1 /media/M --password="$password"  -k "" --protect-hidden=no
truecrypt -t /dev/sde1 /media/V --password="$password"  -k "" --protect-hidden=no
truecrypt -t /dev/sdf /media/S --password="$password"  -k "" --protect-hidden=no

echo "Drives mounted ... Close when ready"

exit 0

这非常适合我的需要。不定期的。我的问题是我有 2 个驱动器通过 PCI 卡连接。通常,它们被操作系统检测为 sdb5 和 sda1,但有时它们会被识别为 sdc5 和 sdd1。

这导致我的脚本返回...

Enter password ...
Opening Pandora's Box ...
Enter your user password or administrator password: 
Error: No such file or directory:
/dev/sdb5
Incorrect password or not a TrueCrypt volume.

Enter password for /dev/sda1: Error: No such file or directory:
/dev/sdd1
Incorrect password or not a TrueCrypt volume.

Enter password for /dev/sdf: 

我想要做的是在我的脚本末尾添加一个“if error”命令来告诉它。“如果错误,请改用它”,然后在操作系统更改驱动器点时列出备用安装路径。

我认为这是有道理的。

4

2 回答 2

2

我建议您改用驱动器 UUID。您可以通过以下方式获取驱动器 UUID:

 $ sudo /sbin/blkid /dev/sda1
 > /dev/sda1: UUID=<SOME-UUID-STRING> TYPE=<TYPE>

并随blkid -U <UUID>您查询设备路径。所以在你的脚本中使用这个:

truecrypt -t $(/sbin/blkid -U <SOME-UUID-STRING>) /media/...

如果您真的更喜欢“错误时”方法:

function mount-truecrypt () {
    local dev=$1
    local mnt=$2
    local alternative_dev=$3
    truecrypt -t $dev $mnt --password="$password"  -k "" --protect-hidden=no || \
      truecrypt -t $alternative_dev $mnt --password="$password"  -k "" --protect-hidden=no
}
mount-truecrypt /dev/sdb5 /media/P /dev/sdc5

更新:

好的,UUID 不起作用,因为分区表在解密之前不可用,truecrypt并且设备是随机的。

这里有一些关于 udev 规则的提示:编写 udev 规则可能会对您和这个命令有所帮助:

sudo udevadm info -a -p $(sudo udevadm info -q path -n /dev/sda)

(来自udevinfo)为您提供驱动器上的所有 udev 信息。

虽然这可能也不容易,因为分区也对 udev 不可用.. 但是您可以通过使用如下规则为驱动器创建符号链接来确定驱动器的主要块设备在哪里:

ATTRS{model}=="<MODEL>", ATTRS{serial}=="<SERIAL>", ACTION=="add", SYMLINK+="<my-symlink>"

然后 /dev/ 指向设备(/dev/sda 左右),readlink您可以按照以下链接进行操作:

readlink -f /dev/<my-symlink>

所以你可以在你的脚本中试试这个:

truecrypt "$(readlink -f /dev/<my-symlink>)1" <args>

在该驱动器上安装分区 1。我不确定它是否有效,但可能会给你一些想法。

于 2013-07-20T08:43:57.497 回答
1

问题是,对于通过 truecrypt 安装驱动器的终端/脚本,您可以这样做:

truecrypt -t /dev/sda /media/Stuff

但是,如果每次启动时每个物理驱动器的 /dev/sda 都会发生变化,那么这会使脚本变得毫无价值。所有链接和库都是从 /media/stuff 设置的,而 /media/stuff 又依赖于 /dev/sda 每次都指向同一个驱动器。所以我需要做一些持久的 /dev/ *点供 truecrypt 使用。

提示:使用 udev 收藏您用于匹配的信息,并确保您的设置完全随机/自定义 /dev/ *

Here is my current process for getting everything to work

1 - PC boots and takes rules from 10-custom-hdd-scsi.rules
2 - Login to Ubuntu where 1 script open terminal and then runs "3"
3 - Truecrypt script prompts for password, and mounts drives to specified mount points allowing for links/libraries to work.

首先运行 - sudo /lib/udev/scsi_id --page=0x83 --whitelisted --device=/dev/sda 并将结果复制下来。为您拥有的每个驱动器执行此操作,您将拥有 Drives scsi id

10-custom-hdd-scsi.rules - 此文件已保存在 /etc/udev/rules.d

# These are the rules to force all drives into specific /dev/sd** slots for truecrypt mounting
#
#KERNELS - looks upwards in device path to find
#PROGRAM - Runs this. It is a serch for WWID (world wide ID)
#RESULT  - This is the result its looking for. It is the specific Drives ID
#SYMLINK - Create the following link (i.e. personal /dev/***)
#
# "==" means match this
# "+=" means if it exists, do this aswell
#
KERNEL=="sd*", PROGRAM=="/lib/udev/scsi_id --page=0x83 --whitelisted --device=/dev/%k", RESULT=="<DRIVES ID>", SYMLINK+="TC-a%n"

KERNEL=="sd*", PROGRAM=="/lib/udev/scsi_id --page=0x83 --whitelisted --device=/dev/%k", RESULT=="<DRIVES ID>", SYMLINK+="TC-b%n"

KERNEL=="sd*", PROGRAM=="/lib/udev/scsi_id --page=0x83 --whitelisted --device=/dev/%k", RESULT=="<DRIVES ID>", SYMLINK+="TC-c%n"

KERNEL=="sd*", PROGRAM=="/lib/udev/scsi_id --page=0x83 --whitelisted --device=/dev/%k", RESULT=="<DRIVES ID>", SYMLINK+="TC-d%n"

KERNEL=="sd*", PROGRAM=="/lib/udev/scsi_id --page=0x83 --whitelisted --device=/dev/%k", RESULT=="<DRIVES ID>", SYMLINK+="TC-e%n"

BANG - 自定义 udev 规则为每个驱动器创建链接。因此,现在您将拥有每次都会更改的标准 /dev/sd**,并且 /dev/TC-a 将保持不变。

打开终端的第一个脚本

#!/bin/bash

gnome-terminal -e /home/kun7/.TrueCrypt/mount_truecrypt_volumes.sh

现在脚本告诉 truecrypt 挂载你的驱动器

#!/bin/bash

echo "Enter password ..."

oldConfig=`stty -g`
stty -echo
read password
stty $oldConfig

echo "Opening Pandora's Box ..."


truecrypt -t /dev/TC-a /media/E --password="$password"  -k "" --protect-hidden=no
truecrypt -t /dev/TC-b /media/D --password="$password"  -k "" --protect-hidden=no
truecrypt -t /dev/TC-c /media/C --password="$password"  -k "" --protect-hidden=no
truecrypt -t /dev/TC-d /media/B --password="$password"  -k "" --protect-hidden=no
truecrypt -t /dev/TC-e /media/A --password="$password"  -k "" --protect-hidden=no

echo "Drives mounted ... Close when ready"

exit 0

- 现在您将启动 PC,登录并获得一个终端,询问您的 truecrypt 密码。- 输入。

- 然后你会被要求输入你的用户密码。

- 脚本将运行,您的驱动器将被安装。

-您现在拥有驱动器的持续持久挂载点。

于 2013-07-24T17:28:35.093 回答