Android MMC/EMMC/MTD Partition Layout-程序员宅基地

技术标签: shell  操作系统  移动开发  

Android devices have a couple of partitions to store different data.

The common ones are the recovery, boot, system, data and cache partitions.

Almost every device has it’s own unique layout even though they come from the same manufacturer.

I have seen phones based on

MTD (Memory Technology Device),

EMMC (Embedded MultiMedia Card) and

MMC (MultiMedia Card) devices.

For MTD and EMMC devices, the partition layout and the partition names
can be retrieved by reading the /proc/mtd and /proc/emmc files.

cat /proc/mtd
cat /proc/emmc 

 

Below is a layout of the EMMC device (HTC Desire S) layout.

MTD device layouts are similar.

The name field for each partition gives us an indication of what each partition is being used for.

shell@android:/ # cat /proc/emmc
dev:        size     erasesize name
mmcblk0p17: 00040000 00000200 "misc"
mmcblk0p21: 0087f400 00000200 "recovery"
mmcblk0p22: 00400000 00000200 "boot"
mmcblk0p25: 22dffe00 00000200 "system"
mmcblk0p29: 002ffc00 00000200 "local"
mmcblk0p27: 090ffe00 00000200 "cache"
mmcblk0p26: 496ffe00 00000200 "userdata"
mmcblk0p30: 014bfe00 00000200 "devlog"
mmcblk0p31: 00040000 00000200 "pdata"
mmcblk0p28: 09800000 00000200 "lib"

If the device is based on MMC, the partition layout can be retrieved from the /proc/partitions file.

But based on the output below, we are unable to map a name for each partition as it was the case for MTD and EMMC devices.

shell@C6603:/ # cat /proc/partitions
major minor  #blocks  name
   7        0      12506 loop0
   7        1       2111 loop1
 179        0   15388672 mmcblk0
 179        1       2048 mmcblk0p1
 179        2        128 mmcblk0p2
 179        3        256 mmcblk0p3
 179        4        256 mmcblk0p4
 179        5        512 mmcblk0p5
 179        6        512 mmcblk0p6
 179        7        512 mmcblk0p7
 179        8        128 mmcblk0p8
 179        9        256 mmcblk0p9
 179       10        256 mmcblk0p10
 179       11        512 mmcblk0p11
 179       12        512 mmcblk0p12
 179       13        512 mmcblk0p13
 179       14        512 mmcblk0p14
 179       15        512 mmcblk0p15
 179       16      16384 mmcblk0p16
 179       17      20480 mmcblk0p17
 179       18        780 mmcblk0p18
 179       19        780 mmcblk0p19
 179       20        780 mmcblk0p20
 179       21       5120 mmcblk0p21
 179       22       8192 mmcblk0p22
 179       23      16384 mmcblk0p23
 179       24    2097152 mmcblk0p24
 179       25     563200 mmcblk0p25
 179       26   12527599 mmcblk0p26
 179       32   31166976 mmcblk1
 179       33   31162880 mmcblk1p1
 254        0      12505 dm-0
 254        1       2110 dm-1

 

To retrieve the so called names for the MMC device partitions, we will need to look under the /dev/ directory.

shell@C6603:/ $ ls -l /dev/block/platform/msm_sdcc.1/by-name/
lrwxrwxrwx root     root              2014-02-09 11:27 FOTAKernel -> /dev/block/mmcblk0p23
lrwxrwxrwx root     root              2014-02-09 11:27 LTALabel -> /dev/block/mmcblk0p16
lrwxrwxrwx root     root              2014-02-09 11:27 TA -> /dev/block/mmcblk0p1
lrwxrwxrwx root     root              2014-02-09 11:27 aboot -> /dev/block/mmcblk0p6
lrwxrwxrwx root     root              2014-02-09 11:27 alt_aboot -> /dev/block/mmcblk0p12
lrwxrwxrwx root     root              2014-02-09 11:27 alt_rpm -> /dev/block/mmcblk0p15
lrwxrwxrwx root     root              2014-02-09 11:27 alt_s1sbl2 -> /dev/block/mmcblk0p10
lrwxrwxrwx root     root              2014-02-09 11:27 alt_sbl1 -> /dev/block/mmcblk0p8
lrwxrwxrwx root     root              2014-02-09 11:27 alt_sbl2 -> /dev/block/mmcblk0p9
lrwxrwxrwx root     root              2014-02-09 11:27 alt_sbl3 -> /dev/block/mmcblk0p11
lrwxrwxrwx root     root              2014-02-09 11:27 alt_tz -> /dev/block/mmcblk0p13
lrwxrwxrwx root     root              2014-02-09 11:27 apps_log -> /dev/block/mmcblk0p22
lrwxrwxrwx root     root              2014-02-09 11:27 boot -> /dev/block/mmcblk0p17
lrwxrwxrwx root     root              2014-02-09 11:27 cache -> /dev/block/mmcblk0p25
lrwxrwxrwx root     root              2014-02-09 11:27 m9kefs1 -> /dev/block/mmcblk0p18
lrwxrwxrwx root     root              2014-02-09 11:27 m9kefs2 -> /dev/block/mmcblk0p19
lrwxrwxrwx root     root              2014-02-09 11:27 m9kefs3 -> /dev/block/mmcblk0p20
lrwxrwxrwx root     root              2014-02-09 11:27 ramdump -> /dev/block/mmcblk0p21
lrwxrwxrwx root     root              2014-02-09 11:27 rpm -> /dev/block/mmcblk0p14
lrwxrwxrwx root     root              2014-02-09 11:27 s1sbl2 -> /dev/block/mmcblk0p4
lrwxrwxrwx root     root              2014-02-09 11:27 sbl1 -> /dev/block/mmcblk0p2
lrwxrwxrwx root     root              2014-02-09 11:27 sbl2 -> /dev/block/mmcblk0p3
lrwxrwxrwx root     root              2014-02-09 11:27 sbl3 -> /dev/block/mmcblk0p5
lrwxrwxrwx root     root              2014-02-09 11:27 system -> /dev/block/mmcblk0p24
lrwxrwxrwx root     root              2014-02-09 11:27 tz -> /dev/block/mmcblk0p7
lrwxrwxrwx root     root              2014-02-09 11:27 userdata -> /dev/block/mmcblk0p26

 

We can now see that the mmcblk0p24 is actually the system partition.

If your phone is rooted and if your ROM has the parted utility, you can use it to get the above information as well.

root@C6603:/ # parted /dev/block/mmcblk0
parted /dev/block/mmcblk0
GNU Parted 1.8.8.1.179-aef3
Using /dev/block/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: MMC 016G93 (sd/mmc)
Disk /dev/block/mmcblk0: 15.8GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
 
Number  Start   End     Size    File system  Name        Flags
 1      131kB   2228kB  2097kB               TA
 2      2228kB  2359kB  131kB                sbl1
 3      2359kB  2621kB  262kB                sbl2
 4      2621kB  2884kB  262kB                s1sbl2
 5      2884kB  3408kB  524kB                sbl3
 6      3408kB  3932kB  524kB                aboot
 7      3932kB  4456kB  524kB                tz
 8      4456kB  4588kB  131kB                alt_sbl1
 9      4588kB  4850kB  262kB                alt_sbl2
10      4850kB  5112kB  262kB                alt_s1sbl2
11      5112kB  5636kB  524kB                alt_sbl3
12      5636kB  6160kB  524kB                alt_aboot
13      6160kB  6685kB  524kB                alt_tz
14      6685kB  7209kB  524kB                rpm
15      7209kB  7733kB  524kB                alt_rpm
16      8389kB  25.2MB  16.8MB  ext4         LTALabel
17      25.2MB  46.1MB  21.0MB               boot
18      46.1MB  46.9MB  799kB                m9kefs1
19      48.2MB  49.0MB  799kB                m9kefs2
20      50.3MB  51.1MB  799kB                m9kefs3
21      51.1MB  56.4MB  5243kB               ramdump
22      56.4MB  64.8MB  8389kB  ext4         apps_log
23      64.8MB  81.5MB  16.8MB               FOTAKernel
24      81.8MB  2229MB  2147MB  ext4         system
25      2229MB  2806MB  577MB   ext4         cache
26      2806MB  15.6GB  12.8GB  ext4         userdata
 
(parted)

Partition names like m9kefs1 and sbl1 may not tell us much about what is inside the partition,

but it gives us some clue to move forward.

If you would like to explore the partition further, you may consider

making a backup of the partition to your SD card using the dd command

and then perform analysis on the dump.

 

You can see the partitions known to the system by examining /proc/partitions. From my HTC desire:

major minor  #blocks  name

  31        0        640 mtdblock0
  31        1       4608 mtdblock1
  31        2       3072 mtdblock2
  31        3     256000 mtdblock3
  31        4      40960 mtdblock4
  31        5     151168 mtdblock5
 179        0    3872256 mmcblk0
 179        1    2872070 mmcblk0p1
 179        2    1000185 mmcblk0p2

The mtdblock devices are the phone's internal flash storage. mmcblk0 is the phone's SD card.

The best way to see what is mounted where is to examine 

/proc/self/mountinfo

This is better than /proc/mounts because the latter misses certain information.

Again, on my HTC desire (I added column headings and ran the output through column -s for good measure):

ID  PARENT  BLOCK  ROOT              MOUNTPOINT                   OPTIONS                             -  TYPE     SOURCE                 SUPEROPTS
1   1       0:1    /                 /                            ro,relatime                         -  rootfs   rootfs                 ro
11  1       0:11   /                 /dev                         rw,relatime                         -  tmpfs    tmpfs                  rw,mode=755
12  11      0:9    /                 /dev/pts                     rw,relatime                         -  devpts   devpts                 rw,mode=600
13  1       0:3    /                 /proc                        rw,relatime                         -  proc     proc                   rw
14  1       0:12   /                 /sys                         rw,relatime                         -  sysfs    sysfs                  rw
15  1       0:13   /                 /acct                        rw,relatime                         -  cgroup   none                   rw,cpuacct
16  1       0:14   /                 /mnt/asec                    rw,relatime                         -  tmpfs    tmpfs                  rw,mode=755,gid=1000
17  1       0:15   /                 /mnt/obb                     rw,relatime                         -  tmpfs    tmpfs                  rw,mode=755,gid=1000
18  11      0:16   /                 /dev/cpuctl                  rw,relatime                         -  cgroup   none                   rw,cpu
19  1       31:3   /                 /system                      ro,relatime                         -  yaffs2   /dev/block/mtdblock3   ro
20  1       31:5   /                 /data                        rw,nosuid,nodev,relatime            -  yaffs2   /dev/block/mtdblock5   rw
21  1       31:4   /                 /cache                       rw,nosuid,nodev,relatime            -  yaffs2   /dev/block/mtdblock4   rw
22  21      31:5   /local/download   /cache/download              rw,nosuid,nodev,relatime            -  yaffs2   /dev/block/mtdblock5   rw
23  1       179:2  /                 /sd-ext                      rw,nosuid,nodev,noatime,nodiratime  -  ext4     /dev/block/mmcblk0p2   rw,commit=19,barrier=0,data=writeback
24  20      179:2  /app              /data/app                    rw,nosuid,nodev,noatime,nodiratime  -  ext4     /dev/block/mmcblk0p2   rw,commit=19,barrier=0,data=writeback
25  20      179:2  /data             /data/data                   rw,nosuid,nodev,noatime,nodiratime  -  ext4     /dev/block/mmcblk0p2   rw,commit=19,barrier=0,data=writeback
26  14      0:6    /                 /sys/kernel/debug            rw,relatime                         -  debugfs  /sys/kernel/debug      rw
27  1       179:1  /                 /mnt/sdcard                  rw,nosuid,nodev,noexec,relatime     -  vfat     /dev/block/vold/179:1  rw,dirsync,uid=1000,gid=1015,fmask=0602,dmask=0602,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro
28  1       179:1  /.android_secure  /mnt/secure/asec             rw,nosuid,nodev,noexec,relatime     -  vfat     /dev/block/vold/179:1  rw,dirsync,uid=1000,gid=1015,fmask=0602,dmask=0602,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro
29  27      0:17   /                 /mnt/sdcard/.android_secure  ro,relatime                         -  tmpfs    tmpfs                  ro,size=0k,mode=000

 

 

eMMC Partitioning

This is my analysis of the partitioning.

These are the symbolic links I created in a directory containing dumps of each partition

(except the over-large userdata partition which isn't of interest).

The hex values are the number of 512-byte sectors the partition uses.

This is in hex so it is easy to spot it in the partition tables that are in both HBoot and REX.

01-dbl-03E8.raw
02-oemsbl-0080.raw
03-osbl-2328.raw
04-header_rex_amss.elf
05-rex_amss-EA60.elf
06-modem_DSP-61A8.raw
07-unknown_data-1000.raw
08-unknown-1800.raw
09-unknown-1000.raw
10-unknown-0800.raw
11-unknown-0800.raw
12-unknown-445F.raw
13-unknown-1800.efs
14-unknown-1800.efs
15-unknown-0800.raw
16-unknown-45FB.raw
17-misc-0200.raw
18-hboot-0800.raw
19-sp1-0800.raw
20-wifi-0A00.raw
21-recovery-43FA.raw
22-boot-2000.raw
23-mfg-0200.raw
24-sp2-0FFE.raw
25-system-116FFF.ext3
27-cache-095FFF.ext3
28-devlog-A5FF.ext3
29-pdata-0200.raw

The partitioning as seen by the kernel on a T-Mobile G2 with 2.6.32.17-g814e0a1:

cat /proc/partitions 
major minor  #blocks  name

   7        0      14585 loop0
 179        0    2203648 mmcblk0
 179        1        500 mmcblk0p1
 179        2         64 mmcblk0p2
 179        3       4500 mmcblk0p3
 179        4          1 mmcblk0p4
 179        5      30000 mmcblk0p5
 179        6      12500 mmcblk0p6
 179        7       2048 mmcblk0p7
 179        8       3072 mmcblk0p8
 179        9       2048 mmcblk0p9
 179       10       1024 mmcblk0p10
 179       11       1024 mmcblk0p11
 179       12       8751 mmcblk0p12
 179       13       3072 mmcblk0p13
 179       14       3072 mmcblk0p14
 179       15       1024 mmcblk0p15
 179       16       8957 mmcblk0p16
 179       17        256 mmcblk0p17
 179       18       1024 mmcblk0p18
 179       19       1024 mmcblk0p19
 179       20       1280 mmcblk0p20
 179       21       8701 mmcblk0p21
 179       22       4096 mmcblk0p22
 179       23        256 mmcblk0p23
 179       24        256 mmcblk0p24
 179       25     425726 mmcblk0p25
 179       26    1361920 mmcblk0p26
 179       27     209715 mmcblk0p27
 179       28      20480 mmcblk0p28
 179       32    7761920 mmcblk1
 179       33    7757824 mmcblk1p1
 254        0      14584 dm-0
# cat /proc/emmc 
dev:        size     erasesize name
mmcblk0p17: 00040000 00000200 "misc"
mmcblk0p21: 0087f400 00000200 "recovery"
mmcblk0p22: 00400000 00000200 "boot"
mmcblk0p25: 19fbfa00 00000200 "system"
mmcblk0p27: 0cccce00 00000200 "cache"
mmcblk0p26: 53200200 00000200 "userdata"
mmcblk0p28: 01400000 00000200 "devlog"
# busybox fdisk -l mmcblk0

Disk mmcblk0: 2256 MB, 2256535552 bytes
1 heads, 16 sectors/track, 275456 cylinders
Units = cylinders of 16 * 512 = 8192 bytes

   Device Boot      Start         End      Blocks  Id System
mmcblk0p1   *           1          63         500  4d Unknown
Partition 1 does not end on cylinder boundary
mmcblk0p2              63          71          64  45 Unknown
Partition 2 does not end on cylinder boundary
mmcblk0p3              71         634        4500  46 Unknown
Partition 3 does not end on cylinder boundary
mmcblk0p4             634     1048577     8383544   5 Extended
Partition 4 does not end on cylinder boundary
mmcblk0p5             634        4384       30000  49 Unknown
mmcblk0p6            4384        5946       12500  50 Unknown
mmcblk0p7            5946        6202        2048  51 Unknown
mmcblk0p8            6202        6586        3072  52 Unknown
mmcblk0p9            6586        6842        2048  53 Unknown
mmcblk0p10           6842        6970        1024  54 Unknown
mmcblk0p11           6971        7098        1024  56 Unknown
mmcblk0p12           7099        8192        8751+ 55 Unknown
mmcblk0p13           8193        8577        3072  4a Unknown
mmcblk0p14           8577        8961        3072  4b Unknown
mmcblk0p15           8961        9089        1024  74 Unknown
mmcblk0p16           9089       10208        8957+ 75 Unknown
mmcblk0p17          10209       10240         256  76 Unknown
mmcblk0p18          10241       10369        1024  47 Unknown
mmcblk0p19          10369       10497        1024  34 Unknown
mmcblk0p20          10497       10657        1280  36 Unknown
mmcblk0p21          10657       11744        8701  71 Unknown
mmcblk0p22          11744       12256        4096  48 Unknown
mmcblk0p23          12257       12288         256  73 Unknown
mmcblk0p24          12289       12321         256  31 Unknown
mmcblk0p25          12321       65536      425726+ 83 Linux
mmcblk0p26          65537      235777     1361920+ 83 Linux
mmcblk0p27         235777      261991      209715+ 83 Linux
mmcblk0p28         261991      264551       20480  19 Unknown 

And seen differently (note the additional "pdata" partition) on a Desire Z with 2.6.32.21-gd2764ed:

# cat /proc/partitions
major minor  #blocks  name

 179        0    2277376 mmcblk0
 179        1        500 mmcblk0p1
 179        2         64 mmcblk0p2
 179        3       4500 mmcblk0p3
 179        4          1 mmcblk0p4
 179        5      30000 mmcblk0p5
 179        6      12500 mmcblk0p6
 179        7       2048 mmcblk0p7
 179        8       3072 mmcblk0p8
 179        9       2048 mmcblk0p9
 179       10       1024 mmcblk0p10
 179       11       1024 mmcblk0p11
 179       12       8751 mmcblk0p12
 179       13       3072 mmcblk0p13
 179       14       3072 mmcblk0p14
 179       15       1024 mmcblk0p15
 179       16       8957 mmcblk0p16
 179       17        256 mmcblk0p17
 179       18       1024 mmcblk0p18
 179       19       1024 mmcblk0p19
 179       20       1280 mmcblk0p20
 179       21       8701 mmcblk0p21
 179       22       4096 mmcblk0p22
 179       23        256 mmcblk0p23
 179       24       2047 mmcblk0p24
 179       25     571391 mmcblk0p25
 179       26    1203199 mmcblk0p26
 179       27     307199 mmcblk0p27
 179       28      21247 mmcblk0p28
 179       29        256 mmcblk0p29
 179       32    7772160 mmcblk1
 179       33    7768064 mmcblk1p1
# cat /proc/emmc
dev:        size     erasesize name
mmcblk0p17: 00040000 00000200 "misc"
mmcblk0p21: 0087f400 00000200 "recovery"
mmcblk0p22: 00400000 00000200 "boot"
mmcblk0p25: 22dffe00 00000200 "system"
mmcblk0p27: 12bffe00 00000200 "cache"
mmcblk0p26: 496ffe00 00000200 "userdata"
mmcblk0p28: 014bfe00 00000200 "devlog"
mmcblk0p29: 00040000 00000200 "pdata"
# fdisk -ul /dev/block/mmcblk0
Warning: deleting partitions after 60

Disk /dev/block/mmcblk0: 2332 MB, 2332033024 bytes
1 heads, 16 sectors/track, 284672 cylinders, total 4554752 sectors
Units = sectors of 1 * 512 = 512 bytes

              Device Boot      Start         End      Blocks  Id System
/dev/block/mmcblk0p1   *           1        1000         500  4d Unknown
Partition 1 does not end on cylinder boundary
/dev/block/mmcblk0p2            1001        1128          64  45 Unknown
Partition 2 does not end on cylinder boundary
/dev/block/mmcblk0p3            1129       10128        4500  46 Unknown
Partition 3 does not end on cylinder boundary
/dev/block/mmcblk0p4           10129     4554750     2272311   5 Extended
Partition 4 does not end on cylinder boundary
/dev/block/mmcblk0p5           10130       70129       30000  49 Unknown
/dev/block/mmcblk0p6           70131       95130       12500  50 Unknown
/dev/block/mmcblk0p7           95132       99227        2048  51 Unknown
/dev/block/mmcblk0p8           99229      105372        3072  52 Unknown
/dev/block/mmcblk0p9          105374      109469        2048  53 Unknown
/dev/block/mmcblk0p10         109471      111518        1024  54 Unknown
/dev/block/mmcblk0p11         111520      113567        1024  56 Unknown
/dev/block/mmcblk0p12         113569      131071        8751+ 55 Unknown
/dev/block/mmcblk0p13         131073      137216        3072  4a Unknown
/dev/block/mmcblk0p14         137218      143361        3072  4b Unknown
/dev/block/mmcblk0p15         143363      145410        1024  74 Unknown
/dev/block/mmcblk0p16         145412      163326        8957+ 75 Unknown
/dev/block/mmcblk0p17         163328      163839         256  76 Unknown
/dev/block/mmcblk0p18         163841      165888        1024  47 Unknown
/dev/block/mmcblk0p19         165890      167937        1024  34 Unknown
/dev/block/mmcblk0p20         167939      170498        1280  36 Unknown
/dev/block/mmcblk0p21         170500      187901        8701  71 Unknown
/dev/block/mmcblk0p22         187903      196094        4096  48 Unknown
/dev/block/mmcblk0p23         196096      196607         256  73 Unknown
/dev/block/mmcblk0p24         196609      200702        2047  26 Unknown
/dev/block/mmcblk0p25         200704     1343486      571391+ 83 Linux
/dev/block/mmcblk0p26        1343488     3749886     1203199+ 83 Linux
/dev/block/mmcblk0p27        3749888     4364286      307199+ 83 Linux
/dev/block/mmcblk0p28        4364288     4406782       21247+ 19 Unknown
/dev/block/mmcblk0p29        4406784     4407295         256  23 Unknown

This dmesg output was captured by Scott Walker (scotty2 a.k.a damnoregonian) on his T-mobile G2 in response to a request from me. 

 

How to find the pathname of the swap partition on SD card?

 

fdisk -l works if you pass the whole disk device name explicitly

(e.g., fdisk -l /dev/block/mmcblk1);

what does not work is automatic discovery of block devices

(apparently because Android places block device files under the /dev/block directory, but fdisk expects to see those files directly in /dev).

Therefore one option is to collect the list of whole disk devices (/dev/block/mmcblk0/dev/block/mmcblk1, …)

and look at their partition tables using fdisk -l <device>.

These whole disk devices are listed in /proc/partitions before the corresponding partitions.

The blkid utility does not look at the partition table at all —

it opens all block devices known by the system and detects the filesystem type from the actual data on those devices;

therefore blkid will not show correct information for the swap partition until that partition is initialized by mkswap.

This means that blkid is useless for your current task (finding which partition should be passed to mkswap). 

mount usually shows devices under /dev/block/vold, which are named according to their major and minor numbers.

To get the usual device name, you can look in /proc/partitions to find a row containing the same numbers in the first two columns.

Then you can remove the p<number>part from the end of the device name, add /dev/block/ at the start and pass the resulting name to 

fdisk -l to see the partition table of the corresponding device. 

Beware that if you look at the fdisk -l output for the internal eMMC flash, you may find lots of partitions with strange types,

especially on Qualcomm-based devices. E.g., see the partition table for Samsung Galaxy W (GT-I8150):

# fdisk -lu /dev/block/mmcblk0                                  

Disk /dev/block/mmcblk0: 3959 MB, 3959422976 bytes
1 heads, 16 sectors/track, 483328 cylinders, total 7733248 sectors
Units = sectors of 1 * 512 = 512 bytes

              Device Boot      Start         End      Blocks  Id System
/dev/block/mmcblk0p1               1      212991      106495+  c Win95 FAT32 (LBA)
Partition 1 does not end on cylinder boundary
/dev/block/mmcblk0p2   *      212992      213991         500  4d Unknown
Partition 2 does not end on cylinder boundary
/dev/block/mmcblk0p3          213992      221183        3596  46 Unknown
Partition 3 does not end on cylinder boundary
/dev/block/mmcblk0p4          221184     7733247     3756032   5 Extended
Partition 4 does not end on cylinder boundary
/dev/block/mmcblk0p5          229376      239615        5120  47 Unknown
/dev/block/mmcblk0p6          245760      285759       20000  49 Unknown
/dev/block/mmcblk0p7          286720      292863        3072  58 Unknown
/dev/block/mmcblk0p8          294912      306175        5632  48 Unknown
/dev/block/mmcblk0p9          311296      324271        6488  50 Unknown
/dev/block/mmcblk0p10         327680      333823        3072  4a Unknown
/dev/block/mmcblk0p11         335872      342015        3072  4b Unknown
/dev/block/mmcblk0p12         344064      360447        8192  90 Unknown
/dev/block/mmcblk0p13         360448      375807        7680  91 Unknown
/dev/block/mmcblk0p14         376832      387071        5120  92 Unknown
/dev/block/mmcblk0p15         393216     1488895      547840  93 Unknown
/dev/block/mmcblk0p16        1490944     1613823       61440  94 Unknown
/dev/block/mmcblk0p17        1613824     3887103     1136640  95 Unknown
/dev/block/mmcblk0p18        3891200     3993599       51200  96 Unknown
/dev/block/mmcblk0p19        3997696     3998695         500  97 Unknown
/dev/block/mmcblk0p20        4005888     4013079        3596  98 Unknown
/dev/block/mmcblk0p21        4014080     4024319        5120  99 Unknown
/dev/block/mmcblk0p22        4030464     4070463       20000  9a Unknown
/dev/block/mmcblk0p23        4071424     4081663        5120  9b Unknown
/dev/block/mmcblk0p24        4087808     4101807        7000  9c Unknown
/dev/block/mmcblk0p25        4104192     4114431        5120  9d Unknown
/dev/block/mmcblk0p26        4120576     4130815        5120  9e Unknown
/dev/block/mmcblk0p27        4136960     4147199        5120  9f BSD/OS
/dev/block/mmcblk0p28        4153344     7733247     1789952  a0 Thinkpad hibernation

 

 

Partition type codes there are even dangerously wrong, because /dev/block/mmcblk0p1, which is declared Win95 FAT32 (LBA),

actually contains some system data (including locations and MD5 hashes of various ROM parts);

however, /dev/block/mmcblk0p28, which is the FAT16-formatted “internal data storage”, has a type which looks completely bogus.

In this case the manufacturer did not reuse the 0x82 (Linux swap) type code for their own purposes,

but I'm not sure that such collisions never occur, so you should not blindly try to use any partition which looks like swap

 — first check that the device size and partition layout are what you expect to see on your SD card.

 

/proc/mtd is never useful for finding a swap partition on SD card

(MTD drivers are used to access directly attached raw flash chips, they cannot work with external SD cards).

 

 

How To Gather Information About Partition Layouts

All Android devices use separate partitions for storing different parts of the entire system.

The boot partition consists of the linux kernel,

recovery partition contains the recovery binary,

system partition contains the device's ROM,

data partition contains all user data and cache partition contains some cache data including dalvik-cache.

Partition layout files are used to determine where each specific partition,

used for Android's internal tools and provide the data to tools like Online Nandroid.

The linux kernel reveals this layout in different places at times, but not always.

In some instances, if this layout is not revealed, Online Nandroid uses it's own manually created partition layout file at

/system/partitionlayout4nandroid

Example (/proc/partitions on a Google Nexus 4):

major minor #blocks name
179  0 15388672 mmcblk0
179  1    65536 mmcblk0p1
179  2      512 mmcblk0p2
179  3      512 mmcblk0p3
179  4     2048 mmcblk0p4
179  5      512 mmcblk0p5
179  6    22528 mmcblk0p6
179  7    22528 mmcblk0p7
179  8      780 mmcblk0p8
179  9      780 mmcblk0p9
179 10      780 mmcblk0p10
179 11      512 mmcblk0p11
179 12      512 mmcblk0p12
179 13      512 mmcblk0p13
179 14     2048 mmcblk0p14
179 15      512 mmcblk0p15
179 16      512 mmcblk0p16
179 17      512 mmcblk0p17
179 18      512 mmcblk0p18
179 19    16384 mmcblk0p19
179 20    16384 mmcblk0p20
179 21   860160 mmcblk0p21
179 22   573440 mmcblk0p22
179 23 13798400 mmcblk0p23
179 24      512 mmcblk0p24
179 25      495 mmcblk0p25

MTD Based Devices

MTD (Memory Technology Device) based devices have 

/proc/mtd 

populated with the partition layout, by the linux kernel.

Thus, no specific partition layout file is required by Online Nandroid, on MTD based devices.

Example (/proc/mtd on a Sony Ericsson Xperia Pro):

dev:    size   erasesize  name
mtd0: 19000000 00020000 "system"
mtd1: 00600000 00020000 "appslog"
mtd2: 06580000 00020000 "cache"
mtd3: 1a400000 00020000 "userdata"
mtd4: 00c80000 00020000 "boot"

Note: Some buggy kernels may not populate /proc/mtd properly.

In most such cases, the underlying MTD partitions would also not be revealed by the kernel,

thus proving a workaround partition layout virtually useless.

EMMC Based Devices

Few EMMC (Embedded MultiMedia Card) based devices have 

/proc/emmc 

populated with the partition layout, by the linux kernel.

In this case, no specific patch file is required by Online Nandroid.

However, this practice is not followed in later devices. Thus, these require patch files.

A partition layout file is very similar to 

/proc/mtd or 

/proc/emmc

generated by linux kernel.

It follows the same format and the same header.

Gathering information to produce a partition layout file is trivial.

It is sometimes revealed somewhere under the /sys/devices by linux kernel.

But this is not always the case. ROM and kernel developers, would,

most of the time, figure this out and share this information in development threads on forums like XDA.

Other times, it is easiest to obtain a copy of recovery.fstab used by stock, CWM, TWRP and other recoveries.

This file is present in the recovery ramdisk and thus can be obtained from someone who has physical access to the device.

Alternatively, this file is available at device repositories on Github and other places.

A simple search on Google for android_device_oem_device,

where oem is the name of device manufacturer such as samsungsonymotorolalge...,

and device is the code name / technical name of the device such as mako for Google Nexus 4 and m0for Samsung Galaxy S III.

In addition a PIT file or a scatter file for the specific device can also be used for deducing the partition layout.

Example (Partition Layout file on an HTC Sensation XL):

dev:       size      erasesize  name
mmcblk0p1: 0001f4 000000 "unknown"
mmcblk0p2: 000040 000000 "unknown"
mmcblk0p3: 001194 000000 "unknown"
mmcblk0p4: 000001 000000 "unknown"
mmcblk0p5: 007530 000000 "unknown"
mmcblk0p6: 0030d4 000000 "unknown"
mmcblk0p7: 000800 000000 "unknown"
mmcblk0p8: 000c00 000000 "unknown"
mmcblk0p9: 000800 000000 "unknown"
mmcblk0p10: 000400 000000 "unknown"
mmcblk0p11: 000400 000000 "unknown"
mmcblk0p12: 00222f 000000 "unknown"
mmcblk0p13: 000c00 000000 "unknown"
mmcblk0p14: 000c00 000000 "unknown"
mmcblk0p15: 000400 000000 "unknown"
mmcblk0p16: 0022fd 000000 "unknown"
mmcblk0p17: 000100 000000 "unknown"
mmcblk0p18: 000400 000000 "unknown"
mmcblk0p19: 000800 000000 "unknown"
mmcblk0p20: 000500 000000 "unknown"
mmcblk0p21: 0021fd 000000 "recovery"
mmcblk0p22: 001000 000000 "boot"
mmcblk0p23: 000100 000000 "unknown"
mmcblk0p24: 007bff 000000 "unknown"
mmcblk0p25: 0fffff 000000 "unknown"
mmcblk0p26: 000c00 000000 "unknown"
mmcblk0p27: 000c00 000000 "unknown"
mmcblk0p28: 0067fe 000000 "misc"
mmcblk0p29: 407fff 000000 "userdata"
mmcblk0p30: 08ffff 000000 "cache"
mmcblk0p31: 007eff 000000 "unknown"
mmcblk0p32: 000103 000000 "unknown"
mmcblk0p33: 8e4ffc 000000 "emmc"

MTK Based Devices

On devices based on MTK (MediaTek) chipsets, a file at 

/proc/dumchar_info 

is populated with the partition layout, by the linux kernel.

This file, however is not similar to /proc/mtd,/proc/emmc and partition layout files used by Online Nandroid.

Since MTK devices use the uboot mechanism, partitions including boot and recovery, are not revealed as separate partitions,

but rather accessed sequencially by size and start parameters.

The dumchar_info file has this size and start parameters specified in it.

This file has some other major differences in partition naming such as

the boot partition is named bootimg instead of boot,

data partition is named usrdata instead of userdata,

system partition is named android instead of system and

internal sd card is named fat instead emmc.

Online Nandroid (since v8.0) has built-in support for MTK based devices,

thus does not require separate partition layout files on MTK based devices.

Example (/proc/dumchar_info on a Star N9770 Dual Core - MT6577):

 

Part_Name    Size               StartAddr         Type   MapTo
preloader    0x0000000000040000 0x0000000000000000   2   /dev/misc-sd
dsp_bl       0x00000000005c0000 0x0000000000040000   2   /dev/misc-sd
mbr          0x0000000000004000 0x0000000000000000   2   /dev/block/mmcblk0
ebr1         0x0000000000004000 0x0000000000004000   2   /dev/block/mmcblk0p1
pmt          0x0000000000400000 0x0000000000008000   2   /dev/block/mmcblk0
nvram        0x0000000000500000 0x0000000000408000   2   /dev/block/mmcblk0
seccfg       0x0000000000020000 0x0000000000908000   2   /dev/block/mmcblk0
uboot        0x0000000000060000 0x0000000000928000   2   /dev/block/mmcblk0
bootimg      0x0000000000600000 0x0000000000988000   2   /dev/block/mmcblk0
recovery     0x0000000000600000 0x0000000000f88000   2   /dev/block/mmcblk0
sec_ro       0x0000000000600000 0x0000000001588000   2   /dev/block/mmcblk0p2
misc         0x0000000000060000 0x0000000001b88000   2   /dev/block/mmcblk0
logo         0x0000000000300000 0x0000000001be8000   2   /dev/block/mmcblk0
expdb        0x0000000000200000 0x0000000001ee8000   2   /dev/block/mmcblk0
android      0x0000000020100000 0x00000000020e8000   2   /dev/block/mmcblk0p3
cache        0x0000000020100000 0x00000000221e8000   2   /dev/block/mmcblk0p4
usrdata      0x0000000020100000 0x00000000422e8000   2   /dev/block/mmcblk0p5
fat          0x00000000854f8000 0x00000000623e8000   2   /dev/block/mmcblk0p6
bmtpool      0x0000000001500000 0x00000000ff9f00a8   2   /dev/block/mmcblk0
Part_Name:Partition name you should open;
Size:size of partition
StartAddr:Start Address of partition;
Type:Type of partition(MTD=1,EMMC=2)
MapTo:actual device you operate

 

Find Recovery Partition

I would recommend running the following command as root from terminal emulator:

cat /cache/recovery/last_log

 

This should tell you which partition is your recovery partition that

you can then dump a copy of the stock recovery.img to your device. 

Partition Information:
preloader    0x0000000000040000   0x0000000000000000   2   /dev/misc-sd
dsp_bl       0x00000000005c0000   0x0000000000040000   2   /dev/misc-sd
mbr          0x0000000000004000   0x0000000000000000   2   /dev/block/mmcblk0
ebr1         0x000000000005c000   0x0000000000004000   2   /dev/block/mmcblk0p1
pmt          0x0000000000400000   0x0000000000060000   2   /dev/block/mmcblk0
nvram        0x0000000000300000   0x0000000000460000   2   /dev/block/mmcblk0
seccfg       0x0000000000020000   0x0000000000760000   2   /dev/block/mmcblk0
uboot        0x0000000000060000   0x0000000000780000   2   /dev/block/mmcblk0
bootimg      0x0000000000600000   0x00000000007e0000   2   /dev/block/mmcblk0
recovery     0x0000000000600000   0x0000000000de0000   2   /dev/block/mmcblk0
sec_ro       0x0000000000600000   0x00000000013e0000   2   /dev/block/mmcblk0p5
misc         0x0000000000060000   0x00000000019e0000   2   /dev/block/mmcblk0
logo         0x0000000000300000   0x0000000001a40000   2   /dev/block/mmcblk0
expdb        0x00000000000a0000   0x0000000001d40000   2   /dev/block/mmcblk0
ebr2         0x0000000000004000   0x0000000001de0000   2   /dev/block/mmcblk0
android      0x0000000020100000   0x0000000001de4000   2   /dev/block/mmcblk0p6
cache        0x000000000a100000   0x0000000021ee4000   2   /dev/block/mmcblk0p2
usrdata      0x0000000041100000   0x000000002bfe4000   2   /dev/block/mmcblk0p3
fat          0x0000000000000001   0x000000006d0e4000   2   /dev/block/mmcblk0p4
bmtpool      0x000000007bafbfff   0xffffffffffa00000   2   /dev/block/mmcblk0

recovery filesystem table
=========================
  0 /tmp ramdisk (null) (null) 0
  1 /boot emmc boot (null) 0
  2 /cache ext4 /dev/block/mmcblk0p2 (null) 0
  3 /data ext4 /dev/block/mmcblk0p3 (null) 0
  4 /misc emmc misc (null) 0
  5 /recovery emmc recovery (null) 0
  6 /sdcard vfat /dev/block/mmcblk1 /dev/block/mmcblk0p4 0
  7 /sdcard2 vfat /dev/block/mmcblk0p4 (null) 0
  8 /system ext4 /dev/block/mmcblk0p6 (null) 0

 

Very interesting from looking at your partition layout I can see that that /dev/block/mmcblk0 contains your recovery partition.

However it appears /dev/block/mmcblk0 is a combined partition that also contains many critical parts of the phones file system

such u-boot, /boot, and other bootloader related components.

I would recommend running the following commands as root from either ADB shell:

cd /dev/block/platform

Then from the platform directory list the contents of the directory with the "ls" command.

Once you have done that you should see a platform name (Or multiple platform names) for example on my Verizon Galaxy S3 it shows:

msm_sdcc.1
msm_sdcc.3

Cd into each of the platform directories (Or if there is only one platform directory "cd" into that)

and list the contents of the platform directory using the "ls" command and look to see if it list a directory "by-name".

root@xxxxxxxxx:/dev/block/platform/msm_sdcc.1 # ls
ls
by-name
by-num
mmcblk0
mmcblk0p1
mmcblk0p10
mmcblk0p11
mmcblk0p12
mmcblk0p13
mmcblk0p14
mmcblk0p15
mmcblk0p16
mmcblk0p17
mmcblk0p18
mmcblk0p19
mmcblk0p2
mmcblk0p20
mmcblk0p21
mmcblk0p22
mmcblk0p23
mmcblk0p3
mmcblk0p4
mmcblk0p5
mmcblk0p6
mmcblk0p7
mmcblk0p8
mmcblk0p9
mmcblk0rpmb

 

 

If the platform directory your in contains the "by-name" folder run the following command:

ls -l /dev/block/platform/{platform directory name here}/by-name

 

If that command returns an output take note of the the block number that contains the recovery partition.

root@xxxxxxxxx:/dev/block/platform/msm_sdcc.1 # ls -l /dev/block/platform/msm_sdcc.1/by-name
s -l /dev/block/platform/msm_sdcc.1/by-name                                   <
lrwxrwxrwx root     root              1970-01-25 07:48 DDR -> /dev/block/mmcblk0p8
lrwxrwxrwx root     root              1970-01-25 07:48 aboot -> /dev/block/mmcblk0p5
lrwxrwxrwx root     root              1970-01-25 07:48 boot -> /dev/block/mmcblk0p9
lrwxrwxrwx root     root              1970-01-25 07:48 cache -> /dev/block/mmcblk0p20
lrwxrwxrwx root     root              1970-01-25 07:48 dbi -> /dev/block/mmcblk0p3
lrwxrwxrwx root     root              1970-01-25 07:48 fsc -> /dev/block/mmcblk0p6
lrwxrwxrwx root     root              1970-01-25 07:48 fsg -> /dev/block/mmcblk0p17
lrwxrwxrwx root     root              1970-01-25 07:48 misc -> /dev/block/mmcblk0p19
lrwxrwxrwx root     root              1970-01-25 07:48 modem -> /dev/block/mmcblk0p1
lrwxrwxrwx root     root              1970-01-25 07:48 modemst1 -> /dev/block/mmcblk0p15
lrwxrwxrwx root     root              1970-01-25 07:48 modemst2 -> /dev/block/mmcblk0p16
lrwxrwxrwx root     root              1970-01-25 07:48 mrd -> /dev/block/mmcblk0p12
lrwxrwxrwx root     root              1970-01-25 07:48 pad -> /dev/block/mmcblk0p14
lrwxrwxrwx root     root              1970-01-25 07:48 persist -> /dev/block/mmcblk0p18
lrwxrwxrwx root     root              1970-01-25 07:48 preload -> /dev/block/mmcblk0p22
lrwxrwxrwx root     root              1970-01-25 07:48 recovery -> /dev/block/mmcblk0p10
lrwxrwxrwx root     root              1970-01-25 07:48 rpm -> /dev/block/mmcblk0p4
lrwxrwxrwx root     root              1970-01-25 07:48 sbl1 -> /dev/block/mmcblk0p2
lrwxrwxrwx root     root              1970-01-25 07:48 splash -> /dev/block/mmcblk0p11
lrwxrwxrwx root     root              1970-01-25 07:48 ssd -> /dev/block/mmcblk0p7
lrwxrwxrwx root     root              1970-01-25 07:48 system -> /dev/block/mmcblk0p21
lrwxrwxrwx root     root              1970-01-25 07:48 tz -> /dev/block/mmcblk0p13
lrwxrwxrwx root     root              1970-01-25 07:48 userdata -> /dev/block/mmcblk0p23

 

 

 

Another suggestion would be to run the following command to try and isolate the

recovery.img from the larger /dev/block/mmcblk0 contents:

dd if=/dev/block/mmcblk0 of=mnt/sdcard/recovery.img bs=1 skip=6291456 count=8257536

 

Additionally you could try dumping the whole /dev/block/mmcblk0 partition using the command

cat /dev/block/mmcblk0 > /mnt/sdcard/recovery.img

 

I dont have a by-name folder but only by-num, which really doesnt help.

So now I will try your second method, extracting a part of the main image!! I'll tell you the result!!!

root@xxxxxxxxx:/dev/block/platform/msm_sdcc.1 # ls -l /dev/block/platform/msm_sdcc.1/by-num
s -l /dev/block/platform/msm_sdcc.1/by-num                                    <
lrwxrwxrwx root     root              1970-01-25 07:48 p1 -> /dev/block/mmcblk0p1
lrwxrwxrwx root     root              1970-01-25 07:48 p10 -> /dev/block/mmcblk0p10
lrwxrwxrwx root     root              1970-01-25 07:48 p11 -> /dev/block/mmcblk0p11
lrwxrwxrwx root     root              1970-01-25 07:48 p12 -> /dev/block/mmcblk0p12
lrwxrwxrwx root     root              1970-01-25 07:48 p13 -> /dev/block/mmcblk0p13
lrwxrwxrwx root     root              1970-01-25 07:48 p14 -> /dev/block/mmcblk0p14
lrwxrwxrwx root     root              1970-01-25 07:48 p15 -> /dev/block/mmcblk0p15
lrwxrwxrwx root     root              1970-01-25 07:48 p16 -> /dev/block/mmcblk0p16
lrwxrwxrwx root     root              1970-01-25 07:48 p17 -> /dev/block/mmcblk0p17
lrwxrwxrwx root     root              1970-01-25 07:48 p18 -> /dev/block/mmcblk0p18
lrwxrwxrwx root     root              1970-01-25 07:48 p19 -> /dev/block/mmcblk0p19
lrwxrwxrwx root     root              1970-01-25 07:48 p2 -> /dev/block/mmcblk0p2
lrwxrwxrwx root     root              1970-01-25 07:48 p20 -> /dev/block/mmcblk0p20
lrwxrwxrwx root     root              1970-01-25 07:48 p21 -> /dev/block/mmcblk0p21
lrwxrwxrwx root     root              1970-01-25 07:48 p22 -> /dev/block/mmcblk0p22
lrwxrwxrwx root     root              1970-01-25 07:48 p23 -> /dev/block/mmcblk0p23
lrwxrwxrwx root     root              1970-01-25 07:48 p3 -> /dev/block/mmcblk0p3
lrwxrwxrwx root     root              1970-01-25 07:48 p4 -> /dev/block/mmcblk0p4
lrwxrwxrwx root     root              1970-01-25 07:48 p5 -> /dev/block/mmcblk0p5
lrwxrwxrwx root     root              1970-01-25 07:48 p6 -> /dev/block/mmcblk0p6
lrwxrwxrwx root     root              1970-01-25 07:48 p7 -> /dev/block/mmcblk0p7
lrwxrwxrwx root     root              1970-01-25 07:48 p8 -> /dev/block/mmcblk0p8
lrwxrwxrwx root     root              1970-01-25 07:48 p9 -> /dev/block/mmcblk0p9

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34242819/article/details/85723085

智能推荐

从零开始搭建Hadoop_创建一个hadoop项目-程序员宅基地

文章浏览阅读331次。第一部分:准备工作1 安装虚拟机2 安装centos73 安装JDK以上三步是准备工作,至此已经完成一台已安装JDK的主机第二部分:准备3台虚拟机以下所有工作最好都在root权限下操作1 克隆上面已经有一台虚拟机了,现在对master进行克隆,克隆出另外2台子机;1.1 进行克隆21.2 下一步1.3 下一步1.4 下一步1.5 根据子机需要,命名和安装路径1.6 ..._创建一个hadoop项目

心脏滴血漏洞HeartBleed CVE-2014-0160深入代码层面的分析_heartbleed代码分析-程序员宅基地

文章浏览阅读1.7k次。心脏滴血漏洞HeartBleed CVE-2014-0160 是由heartbeat功能引入的,本文从深入码层面的分析该漏洞产生的原因_heartbleed代码分析

java读取ofd文档内容_ofd电子文档内容分析工具(分析文档、签章和证书)-程序员宅基地

文章浏览阅读1.4k次。前言ofd是国家文档标准,其对标的文档格式是pdf。ofd文档是容器格式文件,ofd其实就是压缩包。将ofd文件后缀改为.zip,解压后可看到文件包含的内容。ofd文件分析工具下载:点我下载。ofd文件解压后,可以看到如下内容: 对于xml文件,可以用文本工具查看。但是对于印章文件(Seal.esl)、签名文件(SignedValue.dat)就无法查看其内容了。本人开发一款ofd内容查看器,..._signedvalue.dat

基于FPGA的数据采集系统(一)_基于fpga的信息采集-程序员宅基地

文章浏览阅读1.8w次,点赞29次,收藏313次。整体系统设计本设计主要是对ADC和DAC的使用,主要实现功能流程为:首先通过串口向FPGA发送控制信号,控制DAC芯片tlv5618进行DA装换,转换的数据存在ROM中,转换开始时读取ROM中数据进行读取转换。其次用按键控制adc128s052进行模数转换100次,模数转换数据存储到FIFO中,再从FIFO中读取数据通过串口输出显示在pc上。其整体系统框图如下:图1:FPGA数据采集系统框图从图中可以看出,该系统主要包括9个模块:串口接收模块、按键消抖模块、按键控制模块、ROM模块、D.._基于fpga的信息采集

微服务 spring cloud zuul com.netflix.zuul.exception.ZuulException GENERAL-程序员宅基地

文章浏览阅读2.5w次。1.背景错误信息:-- [http-nio-9904-exec-5] o.s.c.n.z.filters.post.SendErrorFilter : Error during filteringcom.netflix.zuul.exception.ZuulException: Forwarding error at org.springframework.cloud..._com.netflix.zuul.exception.zuulexception

邻接矩阵-建立图-程序员宅基地

文章浏览阅读358次。1.介绍图的相关概念  图是由顶点的有穷非空集和一个描述顶点之间关系-边(或者弧)的集合组成。通常,图中的数据元素被称为顶点,顶点间的关系用边表示,图通常用字母G表示,图的顶点通常用字母V表示,所以图可以定义为:  G=(V,E)其中,V(G)是图中顶点的有穷非空集合,E(G)是V(G)中顶点的边的有穷集合1.1 无向图:图中任意两个顶点构成的边是没有方向的1.2 有向图:图中..._给定一个邻接矩阵未必能够造出一个图

随便推点

MDT2012部署系列之11 WDS安装与配置-程序员宅基地

文章浏览阅读321次。(十二)、WDS服务器安装通过前面的测试我们会发现,每次安装的时候需要加域光盘映像,这是一个比较麻烦的事情,试想一个上万个的公司,你天天带着一个光盘与光驱去给别人装系统,这将是一个多么痛苦的事情啊,有什么方法可以解决这个问题了?答案是肯定的,下面我们就来简单说一下。WDS服务器,它是Windows自带的一个免费的基于系统本身角色的一个功能,它主要提供一种简单、安全的通过网络快速、远程将Window..._doc server2012上通过wds+mdt无人值守部署win11系统.doc

python--xlrd/xlwt/xlutils_xlutils模块可以读xlsx吗-程序员宅基地

文章浏览阅读219次。python–xlrd/xlwt/xlutilsxlrd只能读取,不能改,支持 xlsx和xls 格式xlwt只能改,不能读xlwt只能保存为.xls格式xlutils能将xlrd.Book转为xlwt.Workbook,从而得以在现有xls的基础上修改数据,并创建一个新的xls,实现修改xlrd打开文件import xlrdexcel=xlrd.open_workbook('E:/test.xlsx') 返回值为xlrd.book.Book对象,不能修改获取sheett_xlutils模块可以读xlsx吗

关于新版本selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘等问题_unresolved attribute reference 'find_element_by_id-程序员宅基地

文章浏览阅读8.2w次,点赞267次,收藏656次。运行Selenium出现'WebDriver' object has no attribute 'find_element_by_id'或AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath'等定位元素代码错误,是因为selenium更新到了新的版本,以前的一些语法经过改动。..............._unresolved attribute reference 'find_element_by_id' for class 'webdriver

DOM对象转换成jQuery对象转换与子页面获取父页面DOM对象-程序员宅基地

文章浏览阅读198次。一:模态窗口//父页面JSwindow.showModalDialog(ifrmehref, window, 'dialogWidth:550px;dialogHeight:150px;help:no;resizable:no;status:no');//子页面获取父页面DOM对象//window.showModalDialog的DOM对象var v=parentWin..._jquery获取父window下的dom对象

什么是算法?-程序员宅基地

文章浏览阅读1.7w次,点赞15次,收藏129次。算法(algorithm)是解决一系列问题的清晰指令,也就是,能对一定规范的输入,在有限的时间内获得所要求的输出。 简单来说,算法就是解决一个问题的具体方法和步骤。算法是程序的灵 魂。二、算法的特征1.可行性 算法中执行的任何计算步骤都可以分解为基本可执行的操作步,即每个计算步都可以在有限时间里完成(也称之为有效性) 算法的每一步都要有确切的意义,不能有二义性。例如“增加x的值”,并没有说增加多少,计算机就无法执行明确的运算。 _算法

【网络安全】网络安全的标准和规范_网络安全标准规范-程序员宅基地

文章浏览阅读1.5k次,点赞18次,收藏26次。网络安全的标准和规范是网络安全领域的重要组成部分。它们为网络安全提供了技术依据,规定了网络安全的技术要求和操作方式,帮助我们构建安全的网络环境。下面,我们将详细介绍一些主要的网络安全标准和规范,以及它们在实际操作中的应用。_网络安全标准规范