linux usb init,复制Linux liveUSB导致init.d脚本出错 - 不可能..?

请发表您的想法或想出的任何想法。我很想知道别人在想什么。

整体问题

当我安装一个简单的Java应用程序(我写的)通过/etc/init.d/在启动(在后台)运行时,它适用于我明确安装它的liveUSB。当我制作该棒的副本时,它永远不会成功启动。在引导liveUSB副本时,当liveUSB引导进程到达我的脚本时,Java应用程序将始终挂起。我的脚本确实完成了它应该做的事情,甚至每5分钟一次,并将继续运行,直到你关闭机器。

我的脚本阻止了其他一切

什么都没有超出我的脚本

你无法取消我的脚本

没有GUI

您可以看到的唯一文本是我的脚本输出的命令行

设置&测试 - 一切顺利 :)

我有一个带有3个分区的Linux liveUSB。加载简单的标准Xubuntu映像。

sda1> 2GB存储空间

sda2> 2gb系统

sda3>剩下的gb for casper

我创建了一个简单的Java应用程序,它在启动时在后台运行。为了达到这个目的,我遵循了以下步骤:

将java应用程序编译成类

在/ home / user / folder /中放置类文件

将我的startup.sh脚本复制到/etc/init.d/

在/etc/init.d/里面 键入“update-rc.d startup.sh start 20 2 5。stop 20 0 1 6。”

此更新的运行级别成功

现在我可以重启/重启/关闭任何操作,一切运行完美!

复制 - 这里变得棘手!

在创建此棒的副本时,我按照以下步骤操作:

装载sda2 将该文件夹中的所有内容复制到/ home / user / Desktop / tmp-system /

装载sda3 将该文件夹中的所有内容复制到/ home / user / Desktop / tmp-casper /

进入/ home / user / Desktop / tmp-system / 输入“tar -cvf system.tar”。

进入/ home / user / Desktop / tmp-casper / 输入“tar -cvf casper.tar”。

卸除 SDA2

sda3的

插入空USB(例如sdb) 设置分区(与您要复制的大小写相同)

解开分区 tar -xvf system.tar ...进入sdb2

tar -xvf casper.tar ...进入sdb3

测试 - 这里一切都出错了!

将新创建的liveUSB插入计算机

从USB启动

一切都开始好了

我写的Java应用程序被触发了 启动过程永远挂起

没有cmd提示可用

没有GUI可用

好像线程正在运行(它是!输出可以每5分钟查看一次 - 这正是应该的样子)

解决方案尝试&陷阱

1

我可以挂载复制的liveUSB,编辑startup.sh以不启动我的Java应用程序,它仍然无法启动(就像我怀疑的那样?)。

2

如果我使用“dd if = sda of = sdb”,liveUSB的副本将完全正常工作。然而,这不是可接受的解决方案。如果我要将带有dd的16gb棒复制到64gb棒上,那么将64gb棒变成16gb棒。这也会使更改每个分区中需要更改的值变得更加困难。

3

测试了startup.sh和Java应用程序本身的许多变体。所有这些都产生相同的错误。

4

我用来复制的方法适用于其他形式的应用程序,文件或其他任何形式。

我还想尝试避免使用任何其他库或程序来帮助运行Java应用程序。

6

我还装了sda2& sdb2使用cp将所有内容直接从一个复制到另一个,然后对sda3& sdb3。这会产生相同的错误。

其他要点

sda3分区使用cryptsetup加密

system.tar中有2个文件(将是sdb2,来自sda2),在写入USB后会有一个值发生变化。 这两个值在过去没有引起任何问题,并且每次创建新的liveUSB时都会更改

casper.tar中有1个文件(将是sdb3,来自sda3),在写入USB后会有一个值发生变化。 此值在过去没有引起任何问题,并且每次创建新的liveUSB时都会更改。

校验和测试过程

原始的实时USB映像

工作liveUSB> SDA

空usb> SDB

脚步:

装载,复制和安装校验和sda2 输入“mount / dev / sda2 / media / sda2”

键入“tar -C / media / sda2 -cvf~ / Desktop / system.tar”。

输入“find.-type f -exec sha1sum {}';' > /tmp/sda2_checksum.txt“

输入“umount / media / sda2”

装载,复制和安装校验和sda3 输入“mount / dev / sda3 / media / sda3”

输入“tar -C / media / sda3 -cvf~ / Desktop / casper.tar”。

输入“find.-type f -exec sha1sum {}';' > /tmp/sda3_checksum.txt“

输入“umount / media / sda3”

为sdb创建分区

装载,写入&校验和sdb2 输入“mount / dev / sdb2 / media / sdb2”

键入“tar -C / media / sdb2 -xvf~ / Desktop / system.tar”

输入“find.-type f -exec sha1sum {}';' > /tmp/sdb2_checksum.txt“

输入“umount / media / sdb2”

装载,写入&校验和sdb3 输入“mount / dev / sdb3 / media / sdb3”

输入“tar -C / media / sdb3 -xvf~ / Desktop / casper.tar”

输入“find.-type f -exec sha1sum {}';' > /tmp/sdb3_checksum.txt“

输入“umount / media / sdb3”

比较校验和 sort /tmp/sda2_checksum.txt -o /tmp/sda2_checksum.txt.sort

sort /tmp/sda3_checksum.txt -o /tmp/sda3_checksum.txt.sort

sort /tmp/sdb2_checksum.txt -o /tmp/sdb2_checksum.txt.sort

sort /tmp/sdb3_checksum.txt -o /tmp/sdb3_checksum.txt.sort

结果

sda2& sdb2

输入“diff sda2_checksum.txt.sort sdb2_checksum.txt.sort”

45d44

< 2ddf9802c9c15ac6e4575cc9de32e3530eae6b7d ./efi/boot/grub.cfg

82d80

< 59bb2775a8e7e499e0590b7b8c2492eb250fb7d8 ./syslinux/txt.cfg

154a153

> ae6c127713e01fc5fb4a2e4e28f6bbddc6bd6af5 ./efi/boot/grub.cfg

158a158

> b78090b66b4e3fa04ca9d466ee78c9060adf744e ./syslinux/txt.cfg

这两个文件包含每个被更改的值。其他一切都是一样的。结果正是它们应该是的。

sda3&amp; sdb3

输入“diff sda3_checksum.txt.sort sdb3_checksum.txt.sort”

相同 - 请记住这是原始的liveUSB图像。

我将在下一节中介绍进一步的比较结果。

下一步 - 又名行动计划

从liveUSB映像开始,不需要运行脚本。

步骤1 - 成功/失败?

成功 - 校验和匹配

将liveUSB上的java从6更新为7

重新创建tar

从tar创建新的liveUSB

测试liveUSB

第2步 - 成功/失败?

成功 - 校验和匹配

创建/ home / user / folder /

将java应用程序的类文件复制到/ home / user / folder /

重新创建tar

从tar创建新的liveUSB

测试liveUSB

第3步 - 成功/失败?

成功 - 校验和匹配

将startup.sh添加到/etc/init.d/

不调用update-rc.d

重新创建tar

从tar创建新的liveUSB

测试liveUSB

第4步 - 成功/失败?

成功 - 校验和匹配

(我以前从未成功实现过这一点) - 但是需要编写的值尚未插入到casper(sda3)分区中。

输入“update-rc.d startup.sh start 21 2 5”。

重新创建tar

从tar创建新的liveUSB

测试liveUSB

第5步 - 成功/失败?

成功 - 校验和匹配

我不敢相信这有效!这让我想到......(以一种很好的方式说出来)为什么这个世界以前不起作用?

- 巧妙的是版本-13有效。

引导liveUSB

在创建tar之前插入要在casper(sda3)中重写的值 从liveUSB运行时

编辑/home/user/folder/config.properties中的配置文件

关闭liveUSB

重新创建tar

从tar创建新的liveUSB

测试liveUSB

图片完成!!

我还没完成这个!

*写入usb的过程从未改变过。

为什么之前不起作用?

焦油方法? - 只是稍有变化...... 来自“tar -cvf casper.tar”。

要“tar -C / media / sda3 / -cvf~/ Desktop / casper.tar。

这些线条没有完成同样的事情吗?

我将在不久的将来对此进行测试。 - 我怀疑没有区别。

将程序分解为单独的步骤? 之前: 根据NEXT STEPS - 又名行动计划,我将在制作新图像之前完成所有这些步骤。

后: 完全遵循了下一步 - 即行动计划

这可能是区别吗?

我将在不久的将来对此进行测试。

可以从casper(sda3)分区中的/ home /目录中删除大(或小)文件会导致某种损坏吗? 我不知道..?

我将在不久的将来对此进行测试。

进一步测试 - 我想要我的答案!

从原始的liveUSB图像开始。

将liveUSB上的java从6更新为7

创建/ home / user / folder /

将java应用程序的类文件复制到/ home / user / folder /

将startup.sh添加到/etc/init.d/

输入“update-rc.d startup.sh start 21 2 5”。

编辑/home/user/folder/config.properties中的配置文件

这一次一步一步。 - 它会起作用吗?

测试1 - 成功/失败?

失败!

老焦油方法

测试2 - 成功/失败?

老焦油方法

删除/ boot /中生成的文件 当写入casper(sda3)分区时,我的脚本创建此文件,仅包含用于验证的id,对启动过程没有影响。

测试3 - 成功/失败?

新焦油方法

测试4 - 成功/失败?

新焦油方法

删除/ boot /中生成的文件 当写入casper(sda3)分区时,我的脚本创建此文件,仅包含用于验证的id,对启动过程没有影响。

结果

我将按此顺序进行测试:

测试1 - &gt;试验3 - &gt;测试4 - &gt;测试2

如果测试1工作......我会跳出窗外!

- 我不知道为什么它现在会起作用,因为我已经多次测试过并且每次都会产生不成功的靴子。

- 也许cp或tar进程以某种方式被破坏了。

什么时候 测试1失败:

如果测试3工作......

- tar方法导致错误。

- 我不明白旧tar方法与新tar方法有什么不对。

TBC ......

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最小费用最大流模版

#include <iostream> #include <cstring> #include <cstdio> #include <queue> #include <algorithm>using namespace std;const int MAXN10100; const int MAXM40010; const int INF0x3f3f3f3f;struct Edge      //cost代表单位流量流过该…

fpga中的slack_是否想减少部署过程的恐怖程度? 在Slack中构建ChatOps。

fpga中的slackby Rick Mak麦瑞克(Rick Mak) 是否想减少部署过程的恐怖程度&#xff1f; 在Slack中构建ChatOps。 (Want to make the deployment process less scary? Build ChatOps in Slack.) In a company that makes mobile and web products, developers shouldn’t be t…

位运算-查找数组中唯一成对的数

基础实例一&#xff1a;使用位运算判断数的奇偶性 实例代码&#xff1a; public class Test {public static void main(String[] args) {System.out.println(isOdd(49));System.out.println(isOdd(50));}// 与运算public static boolean isOdd(int i){return (i & 1) ! 0;…

Docker实践:Cannot connect to the Docker daemon.

Docker实践&#xff1a;Cannot connect to the Docker daemon.查看docker daemon是否在运行 [rootlocalhost openec]# ps aux | grep dockerroot 3030 0.0 0.0 112656 984 pts/0 S 16:20 0:00 grep --colorauto docker启动docker[rootlocalhost openec]# ser…

linux虚拟终端时间短,使用Screen创建虚拟终端避免Linux远程断线

维护Linux的ssh工具在使用中&#xff0c;一旦遇到网络中断&#xff0c;则当前的shell就会自动关闭当前的工作进度就会丢失&#xff0c;这对于远程升级等比较耗费时间的工作是非常不利的对于远程调适代码也是很不可靠不安全的为此&#xff0c;可以使用screen这个工具来解决这个问…

中国第一软件开发_我第一次开发企业软件中学到的知识

中国第一软件开发In this article, I’ll share ten lessons I learned from my first project as a self-taught software developer. I was working for a consulting company at the time, and my official title was Software Engineer. The project I worked on was a web…

react-native-Cocoapods-Swift-Project

https://reactnative.cn/docs/integration-with-existing-apps/ 1、创建一个xcode工程&#xff0c;single View就行&#xff0c;项目语言选择swift&#xff0c;oc的直接生成就行不用这么麻烦。 2、把跟目录上创建 node的package.json,执行命令 npm init npm install react-nati…

用shell或者python写出各种图形

首先是shell等边三角形[roothxy my_script]# sh ff.sh num:6************************* *********** [roothxy my_script]# cat ff.sh #!/bin/bash ######################################################################### # File Name: ff.sh # Author: huxianyong # mai…

cfdiv2/c/找规律

题目连接 £&#xff1a;若n<4&#xff0c;NO&#xff1b; £&#xff1a;若n4,特判&#xff0c;n5&#xff0c;特判。 £&#xff1a;若n>6,用2-4组成24&#xff0c;1和5和6组成零&#xff0c;即可。 #include <set> #include <map> #includ…

linux lcd显示流程,求助 armlinux中实现lcd显示

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/* for (bufIdx0; bufIdx < NUM_DISPLAY_BUFS-1; bufIdx) {fbp[bufIdx1] fbp[bufIdx] displaySize;}*/for(bufIdx0;bufIdx{buf(unsigned int *)fbp;for (i0; i < displaySize / sizeof(unsigned int); i) {buf[i] UYVY_BL…

android引入开源库_为好目录引入开源:通过代码帮助公益组织

android引入开源库by Michael D. Johnson迈克尔约翰逊(Michael D.Johnson) 为好目录引入开源&#xff1a;通过代码帮助公益组织 (Introducing the Open Source for Good Directory: Help Nonprofits with Code) A few months ago, we asked 20,000 people why they were learn…

第二阶段站立会议08

站立会议内容&#xff1a; 大家准备继续将代码进行融合&#xff0c;进行测试对一些功能进行优化。 1、会议照片&#xff1a; 2、任务展板&#xff1a; 3、燃尽图&#xff1a; 转载于:https://www.cnblogs.com/smcoder/p/7002539.html

ionic view 视图

ionic view 方法 $ionicView.loaded视图已经被加载了。这事件只发生一次当视图被创建并添加到Dom中。当跳出页面并且被缓存了的话&#xff0c;再次访问这个页面时这个时间将不会被激活。Loaded事件是个好方式让你为这个视图设置你的代码&#xff1b; 然而&#xff0c;他并不是…

ios开发 mvp实践_实践中开发人员的工作流程-我们如何在30天内建立​​MVP

ios开发 mvp实践by Lna Faure莱娜福雷(LnaFaure) 实践中开发人员的工作流程-我们如何在30天内建立​​MVP (The developer’s workflow in practice — how we built our MVP in 30 days) As a web developer, I often get to start projects from scratch and make decisions…

linux智能电压表设计与实现,毕业论文 智能数字电压表设计.doc

毕业论文毕业论文智能数字电压表设计智能数字电压表设计- PAGE I -摘要随着微电子技术和计算机技术的迅速发展&#xff0c;特别是单片机的出现和发展&#xff0c;使传统的电子测量仪器在原理、功能、精度及自动化水平等方面发生了巨大的变化&#xff0c;形成一种新一代的测量仪…

git——学习笔记(三)分支管理

一、创建、合并分支 每次提交&#xff0c;git都往后走一格&#xff0c;串成一跳时间线&#xff0c;head指向的是分支&#xff0c;分支指向提交。master是主分支&#xff0c;dev是另一条分支&#xff0c;分支就像指针一样&#xff0c;合并、删除分支时&#xff0c;修改的都是指针…

Redis 它是什么?它用来做什么?它的优势与短板如何?

阅读目的&#xff1a; 对什么是内存型数据库有概念性的认知。?Redis 是什么&#xff1f; 通常而言目前的数据库分类有几种&#xff0c;包括 SQL/NSQL,&#xff0c;关系数据库&#xff0c;键值数据库等等 等&#xff0c;分类的标准也不以&#xff0c;Redis本质上也是一种键值…

阿里巴巴是如何打通 CMDB,实现就近访问的?

CMDB在企业中&#xff0c;一般用于存放与机器设备、应用、服务等相关的元数据。当企业的机器及应用达到一定规模后就需要这样一个系统来存储和管理它们的元数据。有一些广泛使用的属性&#xff0c;例如机器的IP、主机名、机房、应用、region等&#xff0c;这些数据一般会在机器…

我们分析了成千上万的编程访谈。 这就是我们学到的东西。

by Aline Lerner通过艾琳勒纳(Aline Lerner) 我们分析了成千上万的编程访谈。 这就是我们学到的东西。 (We analyzed thousands of coding interviews. Here’s what we learned.) Note: I wrote most of the words in this post, but the legendary Dave Holtz did the heavy…

Java 9 新功能之 HTTP2 和 REPL

对Java 9的炒作将不再局限于模块化&#xff08;modularity&#xff09;&#xff0c;Java 9正在搜罗大量额外的功能模块&#xff0c;这些功能模块正作为Java增强提案&#xff08;JEP&#xff09;提交&#xff0c;并在OpenJDK (Java SE的参考实现项目&#xff09;中实现。 在这篇…